私はプライベートサブクラスの静的インポートを行うことができますか?

StackOverflow https://stackoverflow.com/questions/2046457

質問

私はクラスの外に露出しない、プライベートで列挙型を持っています。私は列挙型を毎回入力する必要がないように、私は、そのタイプの静的インポートを行うことができますとにかくありますか?それともこれを書くための良い方法はありますか?例:

package kip.test;

import static kip.test.Test.MyEnum.*; //compile error

public class Test
{
  private static enum MyEnum { DOG, CAT }

  public static void main (String [] args)
  {
    MyEnum dog = MyEnum.DOG; //this works but I don't want to type "MyEnum"
    MyEnum cat = CAT; //compile error, but this is what I want to do
  }
}
役に立ちましたか?

解決

  

それとも、これを書くための良い方法はありますか?

あなたの主な目標は、彼らの予選列挙識別子なしの項目を参照し、個人的にこのリストを維持するためにしている場合は、

、あなたは完全にenumタイプをスクラップし、通常のプライベート静的定数を使用することができます。

他のヒント

あなたは無修正のアクセスレベル、すなわちを使用することができます。

enum MyEnum { DOG, CAT }

MyEnumは、他のパッケージからでもない任意のサブクラスからクラスには表示されません。それは、民間の最も近い形で、まだあなたが明示的に参照MyEnumを避けるせます。

あなたは完全修飾フィールドにアクセスできることを考えると、私はあなたが静的にそれをインポートすることができないこと、それは、コンパイラ(または言語仕様)のバグであると言うでしょう。

私はあなたが列挙パッケージで保護を行うことを示唆しています。

この(またはなくてもよい)列挙の(静的)メソッド内のコードの一部を移動することは合理的である。

を押す場合は、外側のクラスの静的フィールドを複製することができます。

private static final MyEnum CAT = MyEnum.CAT;
private static final MyEnum DOG = MyEnum.DOG;

不快な、しかし可能性ます。

いや、それはすべてに約あるかprivateほとんどです。

あなたは、単に列挙型自体の内部にコードを書くことができます。

public enum MyEnum {
DOG, CAT;
public static void main(String[] args) {
    MyEnum dog = MyEnum.DOG; // this works but I don't want to have to type
                                // MyEnum
    MyEnum cat = CAT; // compile error, but this is what I want to do
}
 }

自分のクラスのないプライベート列挙型を参照することができ、他の場所は、switch文であります:

private static enum MyEnum {
    DOG, CAT
}

public static void main(String[] args) {
    MyEnum e = null;
    switch (e) {
    case DOG:
    case CAT:
    }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top