2009-11-04 4 views
62

を指定せずに私のJavaの列挙型を参照することができます私はこのような独自の列挙型を定義するクラスがあります。はどのように私はそのタイプ

public class Test 
{ 
    enum MyEnum{E1, E2}; 

    public static void aTestMethod() { 
     Test2(E1); // << Gives "E1 cannot be resolved" in eclipse. 
    } 
    public Test2(MyEnum e) {} 
} 

私はMyEnum.E1を指定した場合、それは正常に動作しますが、私は本当にただたいそれを「E1」とする。どのように私はこれを達成することができますか、またはこれは動作するために別のファイルで定義する必要がありますか?

結論: インポートの構文を正しく取得できませんでした。いくつかの答えがこれが可能であることを示唆して以来、私は必要とする構文を与えて、他のものをupvoteするものを選択するつもりです。

ちなみに、私が静的インポートを動作させる前に、本当にこの部分を見ていましたが、enumを使って書いたswitch文では、その型でプレフィックスを付けられませんでした。残りのコードはそれを必要としました。私の頭を傷つける。

+6

switch文の "本当に奇妙な"動作について:Javaはswitch文のすべての列挙型でこれを行います。どのタイプを切り替えているのか分かっているので、すべてのケースブロックでタイプを再度指定する理由はないと思います。 http://download.oracle.com/javase/tutorial/java/javaOO/enum.html – StriplingWarrior

+1

私には、Enum型接頭辞が許可されないということがあります。他のすべてのプレフィックスは必須です(インポートされていない場合)またはオプションです。 –

+0

'switch'の不一致に関して私はあなたに同意します。経験の少ないJavaプログラマーが頭を傷つけるようにします。 – jmarkmurphy

答えて

100

実際には、ネストした列挙型のstatic importを実行できます。以下のコードは罰金コンパイル:

package mypackage; 

import static mypackage.Test.MyEnum.*; 

public class Test 
{ 
    enum MyEnum{E1, E2}; 

    public static void aTestMethod() { 
     Test2(E1); 
    } 

    public static void Test2(MyEnum e) {} 
} 
+1

私はこれを私の質問の解決策と言いましたが、実際にはそうしていません。列挙型は、この1つのファイル内でのみ使用されます。これが自動的に機能するだけではないというのは奇妙なことです。 –

+0

スタティックインポートを使用する必要がありますが、独自のクラスで定義する必要はありません。 – Yishai

+0

私はいくつかの方法で試してみましたが、インポートを行っているクラスの中のクラスを参照するとき、静的インポートを正しく解決することができません。 –

13

あなたは、ネストされたクラスの静的インポートを行うことができます。

import static apackage.Test.Enum.*; 
4

Testクラスをインポート可能にするパッケージで定義する必要があります。

を使用でき
package mypackage; 

Testで定義されたパッケージ(ITがワークス)で

import static mypackage.Test.MyEnum.*; 

定義されたパッケージがなければ、あなたは(動作しない)を使用することはできません。

import static Test.MyEnum.*;