Digamos que tengo un código como:
import java.util.Date;
import my.own.Date;
class Test{
public static void main(String [] args){
// I want to choose my.own.Date here. How?
..
// I want to choose util.Date here. How ?
}
}
¿Debería ser nombres completos de clases calificados? ¿Puedo deshacerme de las declaraciones de importación? ¿Es este escenario común en la programación del mundo real?
Respuestas:
Puede omitir las declaraciones de importación y consultarlas utilizando la ruta completa. P.ej:
Pero yo diría que usar dos clases con el mismo nombre y una función similar no suele ser la mejor idea a menos que puedas dejar muy claro cuál es cuál.
fuente
your.own.Date
usar ctrl + shift + R. Esto lo cambiará automáticamente en todos los lugares a los que se refiera en su código, así como en el archivo (y nombre de archivo) your / own / Date.java. Cualquier otro IDE probablemente tenga una característica similar.Date
es el nombre perfecto. Lo usará en la mayor parte de su código. Sin embargo, a veces necesitará llamar aljava.util.Date
notablemente para realizar conversiones entre ambos.org.apache.log4j.Logger
yjava.util.logging.Logger
. Por lo general, no tengo control sobre un lado o el otro; Estoy integrando código heredado.utilice el nombre completo en lugar de importar la clase.
p.ej
fuente
Sí, cuando importa clases con los mismos nombres simples, debe referirse a ellas por sus nombres de clase completamente calificados. Dejaría las declaraciones de importación, ya que les da a otros desarrolladores una idea de lo que hay en el archivo cuando están trabajando con él.
fuente
Otra forma de hacerlo es subclasificarlo:
Y luego importe my.own.FQNDate en paquetes que tengan java.util.Date.
fuente
Matchers
y MockitoMatchers
en la misma clase. Parece funcionar con métodos estáticos..when
s,.thenReturn
s , etc. - elimina laMockito.
hinchazón.Si tiene su propia clase de fecha, debe distinguirla de la clase de fecha incorporada. es decir, ¿por qué creaste el tuyo? Algo como ImmutableDate o BetterDate o NanoDate, incluso MyDate indicaría por qué tiene su propia clase de fecha. En este caso, tendrán un nombre único.
fuente
Puede importar uno de ellos mediante la importación. Para todas las demás clases similares, debe especificar nombres de clase totalmente calificados. De lo contrario, obtendrá un error de compilación.
P.ej:
fuente
Este escenario no es tan común en la programación del mundo real, pero tampoco tan extraño. A veces sucede que dos clases en paquetes diferentes tienen el mismo nombre y las necesitamos a las dos.
No es obligatorio que si dos clases tienen el mismo nombre, ambas contendrán las mismas funcionalidades y debamos elegir solo una de ellas.
Si necesitamos ambos, entonces no hay nada de malo en usarlos. Y tampoco es una mala idea de programación.
Pero deberíamos usar nombres completos de las clases (que tienen el mismo nombre) para dejar claro a qué clase nos referimos también.
:)
fuente
Me encuentro con este problema cuando, por ejemplo, mapeo una clase a otra (como cuando cambio a un nuevo conjunto de clases para representar datos personales). En ese punto, necesita ambas clases porque ese es el objetivo del código: asignar una a la otra. Y no puede cambiar el nombre de las clases en ningún lugar (nuevamente, el trabajo es mapear, no cambiar lo que hizo otra persona).
Completamente calificado es una forma. Parece que en realidad no puede incluir ambas declaraciones de importación, porque Java se preocupa por a qué "Persona" se refiere, por ejemplo.
fuente
Si realmente desea o necesita usar el mismo nombre de clase de dos paquetes diferentes, tiene dos opciones:
1-elija uno para usar en la importación y use el nombre de clase completo del otro:
2-utilice siempre el nombre de clase completo:
fuente
Simplemente tuve el mismo problema, lo que hice, organicé el orden de la biblioteca en secuencia, por ejemplo, había java.lang.NullPointerException y javacard.lang.NullPointerException. Hice la primera como biblioteca predeterminada y si necesita usar la otra, puede especificar explícitamente el nombre completo de la clase calificada.
fuente
Cuando llama a clases con los mismos nombres, debe especificar explícitamente el paquete desde el que se llama a la clase.
Puedes hacer esto:
Salida:
fuente