私はプライベートサブクラスの静的インポートを行うことができますか?
-
20-09-2019 - |
質問
私はクラスの外に露出しない、プライベートで列挙型を持っています。私は列挙型を毎回入力する必要がないように、私は、そのタイプの静的インポートを行うことができますとにかくありますか?それともこれを書くための良い方法はありますか?例:
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:
}
}
所属していません StackOverflow