2012-03-10 8 views
5

Para que este código fuente ...Choque de nombres entre el paquete y la clase. ¿Error en Eclipse o javac?

enter image description here

... Eclipse informa del error siguiente:

Only a type can be imported. pkg.a resolves to a package

... mientras Soles javac compila bien.

situación similar si trato de calificar totalmente la clase pkg.a así:

enter image description here

informa Eclipse ...

pkg.a cannot be resolved to a type

... mientras Soles javac compila bien.


Parece que Eclipse favorece la interpretación de un identificador como un paquete de más de un nombre de clase, mientras que javac hace exactamente lo contrario. Entonces, ¿es un error en Eclipse o en javac?

(una referencia a la especificación del lenguaje es, obviamente, un punto a favor.)

Respuesta

1

Es una convención de estilo para dar clases un nombre que empieza con una letra mayúscula y paquetes con una letra minúscula; eso resolvería tu problema.

+0

¿Has leído la pregunta? (sugerencia, busque el texto en negrita :) – aioobe

+0

Leí la pregunta; Considero que su problema es una de esas cosas que solo hacen la vida más difícil si se detiene en ellas, ya que seguir una convención de estilo simplemente lo evita. – Tom

3

En definitiva, es un error de Eclipse:

6.4.2. Obscuring

A simple name may occur in contexts where it may potentially be interpreted as the name of a variable, a type, or a package. In these situations, the rules of §6.5 specify that a variable will be chosen in preference to a type, and that a type will be chosen in preference to a package. Thus, it is may sometimes be impossible to refer to a visible type or package declaration via its simple name. We say that such a declaration is obscured.

La clara implicación es que es legal para una clase y un paquete para tener el mismo nombre. De lo contrario, el JLS diría que una clase que oculta un paquete es ilegal ... no es que la clase se use con preferencia.


Una vez dicho esto, la única razón por la que has metido en esta situación es que usted ha elegido ignorar las convenciones de Java en el nombramiento. No esperes mucha simpatía ...

+0

¿Sabes si este error ya fue informado? En mi caso, estoy dependiendo de una biblioteca (JAR) que contiene tanto una clase (com.foo.Bar) como algunos recursos en una carpeta que entran en conflicto con el nombre de clase (com/foo/Bar/boo.xml) Aquí no creo que haya una convención de nombres violada ... Todavía Eclipse no puede compilar eso. –

+0

Se informó pero se cerró: https://bugs.eclipse.org/bugs/show_bug.cgi?id=117182 –

Cuestiones relacionadas