2012-01-11 8 views
16

Ho importato un'applicazione Java esistente nel mio workspace. Vedo che una classe con lo stesso nome è presente in diversi pacchetti con nell'applicazione.Java: l'importazione si scontra con un'altra istruzione import

Ad esempio è presente con in

com.tata.model.common.Status; 
com.bayer.frontlayer.dao.Status; 

Quando ho cercato di utilizzare entrambi all'interno di una classe, ad esempio come mostrato di seguito

import com.tata.model.common.Status; 
import com.bayer.frontlayer.dao.Status; 
public class Adapter 
{ 

} 

È una classe denominata "Status.java" ha iniziato a dare un errore in Eclipse affermando

L'importazione com.bayer.frontlayer.dao.Status collide con un'altra dichiarazione di importazione

Esiste comunque una soluzione per risolvere questo problema senza modificare il nome delle classi ??

Grazie.

risposta

27

Si possono utilizzare in modo esplicito senza importarle, in modo che il nome del pacchetto incluso differenzia tra i due:

//No imports required! 
public class Adapter 
{ 
    private com.tata.model.common.Status x; 
    private com.bayer.frontlayer.dao.Status y; 
} 
+9

java continua a uccidermi lentamente ... – Ryan

+0

Non c'è un modo meno dettagliato? In che modo le persone finiscono per fare riferimento a quest'ultimo solo tramite l'ultimo paio di pacchetti, ad esempio common.Status anziché com.tata.model.common.Status – pete

+0

@pete puoi dare un esempio? – nasukkin

10

È possibile importare solo una delle classi e utilizzare il nome completo per l'altro.

ad es.

import com.tata.model.common.Status; 
//import com.bayer.frontlayer.dao.Status; 

class SomeClass{ 
    void someMethod(){ 
     new Status(); // com.tata.model.common.Status 
     new com.bayer.frontlayer.dao.Status(); //com.bayer.frontlayer.dao.Status 
    } 
} 

anche se penso che sarebbe meno confusione nel tuo caso, se hai appena usato i nomi pienamente qualificati per entrambe le classi.

+0

Non c'è un modo meno dettagliato? In che modo le persone finiscono per farvi riferimento solo tramite l'ultimo paio di pacchetti, ad esempio common.Status anziché com.tata.model.common.Status – pete

+0

Se possiedi uno dei pacchetti, puoi rinominare le classi. Se implementano altre interfacce sufficienti, è possibile dichiarare le variabili in base a uno dei tipi di interfaccia. Potresti anche avvolgere gli oggetti, ma questo farebbe molto più danno che bene. Altre lingue consentono di [rinominare] (http://stackoverflow.com/a/28362090/469220) le importazioni. – Vlad

2

applicare direttamente pieni nomi di classe laddove applicabile. Es .:

public class SomeClass { 

public someMethod() { 

com.myapp.someotherpackage.Status = "something"; 

com.some.other.package.Status = "otherthing"; 

if(com.myapp.someotherpackage.Status == com.some.other.package.Status) { 

} 
.... 
} 
} 
+0

Grazie mille per l'aiuto, ma sfortunatamente potevo inserire una sola risposta. – Kiran

Problemi correlati