2012-03-10 11 views
5

Per questo codice sorgente ...Nome scontro tra pacchetto e classe. Bug in Eclipse o javac?

enter image description here

... Eclipse segnala il seguente errore:

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

... mentre Soli javac compila bene.

Situazione simile se provo a qualificare completamente la classe pkg.a in questo modo:

enter image description here

Eclipse riporta ...

pkg.a cannot be resolved to a type

... mentre Soli javac compila bene.


Sembra Eclipse favorisce interpretare un identificatore come un pacchetto su un nome di classe, mentre javac fa l'esatto contrario. Quindi, si tratta di un bug in Eclipse o in javac?

(un riferimento alla specifica del linguaggio è ovviamente un plus.)

risposta

1

Si tratta di una convenzione styling per dare lezioni di un nome che inizia con una lettera maiuscola e pacchetti con una lettera minuscola; questo risolverebbe il tuo problema.

+0

Hai letto la domanda? (suggerimento, cerca il testo in grassetto :) – aioobe

+0

Ho letto la domanda; Considero il tuo problema una di quelle cose che rendono la vita più difficile solo se ti fermi su di loro poiché seguire una convenzione di stile lo evita. – Tom

3

E 'sicuramente un bug 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 chiara implicazione è che è legale per una classe e un pacchetto per avere lo stesso nome. Altrimenti, il JLS direbbe che una classe che oscura un pacchetto era illegale ... non che la classe sia usata di preferenza.


Detto questo, l'unica ragione che hai ottenuto in questa situazione è che hai scelto di ignorare le convenzioni di Java su denominazione. Non aspettarti molta simpatia ...

+0

Sai se questo bug è già stato segnalato? Nel mio caso sono dipendente da una libreria (JAR) che contiene sia una classe (com.foo.Bar) che alcune risorse in una cartella che si scontrano con il nome della classe (com/foo/Bar/boo.xml) Qui I non pensare che vi sia alcuna convenzione sui nomi violata ... Still Eclipse non può compilare quello. –

+0

È stato segnalato ma chiuso: https://bugs.eclipse.org/bugs/show_bug.cgi?id=117182 –

Problemi correlati