2012-01-11 5 views
16

He importado una aplicación Java existente en mi espacio de trabajo. Veo que una clase con el mismo nombre está presente en diferentes paquetes en la Aplicación.Java: la importación colisiona con otra instrucción de importación

Por ejemplo, una clase llamada "Status.java" está presente con en

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

Cuando intenté utilizar tanto de ellos dentro de una clase, por ejemplo como se muestra a continuación

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

} 

Se comenzado a dar un error en Eclipse indicando

El importación com.bayer.frontlayer.dao.Status colisiona con otra instrucción de importación

¿Hay alguna forma de resolver esto sin cambiar el nombre de las clases?

Gracias.

Respuesta

27

Puede usarlos de forma explícita, sin importar ellos, por lo que el nombre del paquete incluido diferencia entre los dos:

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

java me sigue matando lentamente ... – Ryan

+0

¿No hay una manera menos verbosa? ¿Cómo puede la gente llegar a referenciarlo solo a través del último par de paquetes, por ejemplo, common.Status en lugar de com.tata.model.common.Status – pete

+0

@pete? ¿Puedes dar un ejemplo? – nasukkin

10

Puede importar solo una de las clases y usar el nombre totalmente calificado para la otra.

p. Ej.

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 
    } 
} 

Aunque creo que sería menos confuso en su caso si acaba de utilizar los nombres completos para ambas clases.

+0

¿No hay una manera menos detallada? ¿Cómo puede la gente llegar a referenciarlo solo a través del último par de paquetes, por ejemplo, common.Status en lugar de com.tata.model.common.Status – pete

+0

Si posee alguno de los paquetes, puede cambiar el nombre de las clases. Si implementan otras interfaces que sean suficientes, puede declarar sus variables según uno de los tipos de interfaz. También podría envolver los objetos, pero eso haría mucho más daño que bien. Otros idiomas le permiten [cambiar el nombre] (http://stackoverflow.com/a/28362090/469220) importaciones. – Vlad

2

aplicar directamente los nombres completos de clase siempre que sea aplicable. Ej-

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

Muchas gracias a todos por ayudar, pero desafortunadamente pude marcar una sola respuesta. – Kiran