10

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

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
  }
}
4

6 に答える 6

10

変更なしのアクセスレベルを使用できます。

enum MyEnum { DOG, CAT }

MyEnum他のパッケージのクラスにも、どのサブクラスのクラスにも表示されません。これはプライベートの最も近い形式ですが、明示的に参照することを避けられますMyEnum

于 2010-01-12T03:27:34.473 に答える
5

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

列挙型をパッケージで保護することをお勧めします。

于 2010-01-12T03:21:56.467 に答える
3

コードの一部を列挙型の(静的)メソッドに移動することは合理的である場合もあれば、そうでない場合もあります。

押すと、外部クラスの静的フィールドを複製できます。

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

厄介ですが、可能性があります。

于 2010-01-12T03:28:13.310 に答える
2

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

主な目標が、修飾する列挙型識別子なしでアイテムを参照し、このリストを非公開で維持することである場合は、enum型を完全に破棄して、通常のプライベート静的定数を使用できます。

于 2010-01-12T03:32:19.447 に答える
1

列挙型自体の中にコードを書くだけで済みます。

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
}
 }

プライベート列挙型がクラスなしで参照できるもう1つの場所は、switchステートメントです。

private static enum MyEnum {
    DOG, CAT
}

public static void main(String[] args) {
    MyEnum e = null;
    switch (e) {
    case DOG:
    case CAT:
    }
}
于 2010-01-12T03:26:22.423 に答える
0

いいえ、それprivateがすべてです。

于 2010-01-12T03:17:26.070 に答える