2011-07-04 8 views
6

Estoy llegando a un problema con una clase de ayuda en la que estoy trabajando para traducir entre 2 clases del mismo nombre. Ambas clases están fuera de mi control, así que no puedo simplemente cambiarles el nombre.El mejor enfoque para hacer frente a las colisiones de nombres de clase entre espacios de nombres

Mis opciones básicas de todos implican declarar el espacio de nombres en su totalidad por lo menos uno de los tipos:

import com.myco.second.long.package.namespace.MyObject; 
public class MyObjectConvertor { 

    MyObject transform(com.myco.first.long.package.namespace.MyObject o) {} 
} 

O el enfoque inverso:

import com.myco.first.long.package.namespace.MyObject; 
public class MyObjectConvertor { 

    com.myco.second.long.package.namespace.MyObject transform(MyObject o) {} 
} 

o declarar ambos espacios de nombres, de una manera más explícita patrón:

public class MyObjectConvertor { 

    com.myco.second.long.package.namespace.MyObject 
     transform(com.myco.first.long.package.namespace.MyObject o) {} 
} 

¿Hay alguna otra solución que podría ordenar estas metanfetaminas od firmas? Me pregunto si algún tipo de solución de estilo C++ "typedef" podría ser posible.

Respuesta

8

No hay manera de ordenar las firmas, al menos una clase tendrá que ser referenciada por el nombre de clase completo.

Y en su caso especial, incluso diría: no importe ninguna de esas clases, use la versión 3 en su código fuente para que todos sepan, que sus clases de transformación con tienen el mismo nombre que son definido en diferentes paquetes.

Cuestiones relacionadas