2011-06-13 9 views
6

¿Cuáles son las reglas que usa Java para resolver los identificadores de puntos?Análisis de Java de identificadores de puntos

Por ejemplo:

import Foo.Bar; 

class Foo 
{ 
    public static class Bar 
    { 
    }; 
}; 

Ahora, Foo.Bar puede hacer referencia a la clase importada Bar o el definido en el código fuente. ¿Cómo se resuelve este tipo de ambigüedad?

He intentado este caso por lo que sé lo que sucede en la práctica, pero estoy buscando más que eso; Quiero saber las reglas subyacentes. Por ejemplo, si existe Foo.Bar en el archivo fuente, ¿aún puedo hacer referencia a la clase importada Foo.Bar.Baz? ¿Qué pasa si Foo.Bar es un paquete y también una clase? Si el compilador no puede encontrar Foo.Bar en el Foo más cercano, ¿se acaba de dar por vencido, o sigue buscando otras Foo s hasta que se agote o encuentre una que coincida?

(Por cierto, he encontrado el bit relevante en la especificación del lenguaje. No ayuda mucho ...)

+2

Si todo el código sigue las convenciones de nomenclatura de Java recomendadas, entonces esto nunca se presenta: los nombres de los paquetes siempre son minúsculas, y los nombres de las clases siempre comienzan con una letra mayúscula. Si su código no sigue esa convención, bueno, lo que ve en la especificación del lenguaje es lo que obtiene. –

+0

Cierto, pero no es lo que estaba preguntando ... –

+0

Correcto, y es por eso que mi comentario es un comentario, no una respuesta. ;-) –

Respuesta

4

Para resolver un choque extraño como esto, el compilador Java sigue las mismas reglas que utiliza para resolver cosas como nombres de variables locales que chocan con nombres de campos de instancias; utiliza la declaración "más cercana". En este caso, la clase local Foo ganará sobre la importada.

También puede producirse un choque cuando se importan dos clases del mismo nombre. El ejemplo más común es java.util.Date y java.sql.Date. Si los ha importado a los dos en su clase, debe consultarlos usando su nombre completo.

+0

-1 por ignorar la pregunta: "He probado este caso, así que sé lo que sucede en la práctica, pero estoy buscando más que eso, quiero conocer las reglas subyacentes". – Zach

+0

@Zack OK - respondió su punto para aclarar el choque exacto – Bohemian

+0

downvote eliminado. ¡Gracias! – Zach

Cuestiones relacionadas