2013-06-06 40 views
0

在Java中訪問定義的類之外的枚舉應直接使用還是必須使用類名稱作爲前綴?如何訪問定義它的類之外的枚舉

+0

枚舉只是特殊類型的類,所以你可以在一個文件中聲明多個類,你可以在類中聲明Enums。 –

+0

@RongNK:我在問如何訪問它們。我有一個類的枚舉測試。我想在外面訪問它,那麼我應該如何訪問它? – NewUser

+0

你必須聲明enum爲'public ...(取決於你想要的)',然後在外部包時使用類名作爲前綴。 –

回答

2

如果您導入它們,您可以直接訪問它們。否則,您需要使用封閉的類名作爲限定符。

A.java:

class A { 
    enum E { . . . } 
    . . . 
} 

B.java(同一個包A.java在這個例子中):

import A.E; 
class B { 
    E eThing;  // works because A.E was imported 
    A.E eThing2; // always works provided A is known (in same package here) 
    . . . 
} 

當然,這個答案沒有解決的可訪問性規則的問題,這仍然適用。 (例如,您不能從另一個類訪問private枚舉。)

如果B.java位於不同的包中,則不需要import A;即可擁有import A.E;。如果您需要使用B的代碼中的(非限定)名稱A,則只需要導入A

A的子類當然繼承A.E,因爲EA的成員;他們不需要任何直接使用E的導入(只要授予訪問權限即可)。

+0

你應該包括一個例子。 –

+0

我可以直接使用嗎? – NewUser

+0

@RongNK - 完成。 –

2

單獨申報像枚舉類

public enum MyEnum{ 
    SOMETHING 
} 

這是訪問另一個類。

public class AnotherClass{ 
     .. 
     public void someMethod(){ 
      Sysout(MyEnum.SOMETHING); 
     } 
    } 

if you do static import u can acces with the name of enum instance;

import static MyEnum.SOMETHING 

public class MyClass{ 

public void method(){ 
SOMETHING.name(); 
} 
} 

這裏另一個possibilty就像一個內部類

public class EnumHolder{ 
     public enum MyEnum{ 
      ENUM_INSTANCE 
     } 

    } 

和外人類可以訪問這裏引用classHolder然後枚舉

public class OutsiderClass{ 

    public void method(){ 
     Sysout(EnumHolder.MyEnum.ENUM_INSTANCE); 
    } 

}