2013-05-16 11 views
5

Ich habe eine Klasse A mit einer statischen inneren Klasse im Innern B genannt:Kann statische statische Klasse nicht 'importieren'?

in B
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); 
    } 
} 

Ich mag statisches Import alles, aber es wird nicht funktionieren:

$ 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 

Warum?

Antwort

9

Dies funktioniert nicht, wenn A im Standardpaket ist. Sie können jedoch ein Paket Erklärung hinzufügen:

package mypackage; 

und

import static mypackage.A.B.*; 

Die statische Import-Syntax von der JLS gegeben:

SingleStaticImportDeclaration: import static Type-Name . Identifikator;

wo Type-Name erforderlich ist full qualified sein.

In Using Package Members die static import Syntax mit Paketnamen gegeben ist im Preis inbegriffen:

import static mypackage.MyConstants.*; 

It is recommendedstatic Importe sehr sparsam zu verwenden.

+1

"Dies wird nicht funktionieren, wenn A im Standardpaket ist." Was. Warum? – Dog

+0

Von JLS scheint es, dass die Klasse TypeName vollständig qualifiziert sein muss. Davon ausgehend verlangt der Compiler, dass die Konvention eines Paketnamens vorliegt, wahrscheinlich um Zweideutigkeiten bei der Klassenbenutzung zu vermeiden – Reimeus

1

Es sollte

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

werden, wenn ein in dem Standard-Paket ist, wird dies nicht gelingen.

Zuletzt ist es keine gute Praxis, * zu importieren. Importieren Sie nur die Dinge, die Sie benötigen, in diesem Fall - import static <the-package-for-the-class-A>.A.B.x;, wenn Sie nur die x Variable verwenden.

+0

"Es ist keine gute Methode, * zu importieren." Auch wenn es aus derselben Datei stammt? – Dog

+0

Ja, es hat keinen Sinn, ungenutzte Importe zu haben. –

+0

was? Ich verwende die Importe, sonst würde ich diese Frage nicht stellen – Dog

Verwandte Themen