2013-05-16 19 views
5

Ho una classe A con una classe interna statica al suo interno chiamato B:Impossibile importare la classe interna statica?

import static A.B.*; 

class A { 
    static class B { 
     static int x; 
     static int y; 
    } 
    public static void main(String[] args) { 
     System.out.println(x); 
    } 
} 

voglio importazione statica tutto in B, ma non funzionerà:

$ javac A.java 
A.java:1: package A does not exist 
import static A.B.*; 
      ^
A.java:9: cannot find symbol 
symbol : variable x 
location: class A 
     System.out.println(x); 
         ^
2 errors 

Perché?

risposta

9

Questo non funziona se A si trova nel pacchetto predefinito. Tuttavia, si potrebbe aggiungere una dichiarazione di package:

package mypackage; 

e utilizzare

import static mypackage.A.B.*; 

La sintassi di importazione statica dal JLS è dato:

SingleStaticImportDeclaration: import static TypeName . Identificatore;

dove è richiesta TypeName di essere full qualified.

Nel Using Package Members la sintassi static import viene dato con il nome della confezione:

import static mypackage.MyConstants.*; 

It is recommended da usare static importazioni con molta parsimonia.

+1

"Questo non funzionerà se A è nel pacchetto predefinito." Che cosa. Perché? – Dog

+0

Da JLS, sembrerebbe che la classe TypeName debba essere pienamente qualificata. A giudicare da ciò, il compilatore richiede la presenza di un nome di pacchetto, probabilmente per evitare l'ambiguità dell'uso della classe – Reimeus

1

Dovrebbe essere

import <the-package-for-the-class-A>.A.B.*; 

Se A è nel pacchetto di default, questo sarà sicuro.

Infine, non è una buona pratica importare *. Importa solo le cose di cui hai bisogno, in questo caso - import static <the-package-for-the-class-A>.A.B.x; se devi utilizzare solo la variabile x.

+0

"non è una buona pratica importare *" Anche se proviene dallo stesso file? – Dog

+0

Sì, non ha senso avere importazioni inutilizzate. –

+0

cosa? Io uso le importazioni, altrimenti non farei questa domanda – Dog

Problemi correlati