1

私はJavaの初心者です(Objective-Cは私の最もよく知られている言語です)、達成しようとしていることの明確な例を見つけるのに本当に苦労しています:

public class OuterClass extends ClassToExtend {

    public enum Enum { value1, value2 }

    public class InnerClass extends AnotherClassToExtend {

        public void aMethod(int position) {
            switch (position) {
                case Enum.value1:
                    //Do something
                case Enum.value2:
                    //Do Something else
            }
        }
    }
}

明らかにこれは機能しません (列挙型への参照) が、私が何をしようとしているのか、これを機能させるために何を変更する必要があるのか​​ を理解する必要がありますか? 列挙型を参照するためにどこかで宣言する必要があると思いますか?

将来的に同様の問題を学び、できれば自分で解決できるように、修正の説明に感謝します。

ありがとう

編集:メソッドが @Override で、署名を変更できない場合はどうなりますか?

4

4 に答える 4

3

まず、列挙自体をオンにする必要があるため、次の行を変更する必要があります。

public void aMethod(int position) {

int の代わりに enum を受け入れるには。次に、列挙型はすでに現在のオブジェクトのスコープ内にあるため、列挙型の値をスイッチ内で直接参照する必要があります。

public class OuterClass extends ClassToExtend {

    public enum Enum { value1, value2 };

    public class InnerClass extends AnotherClassToExtend {

        public void aMethod(Enum position) {
            switch (position) {
                case value1:
                    //Do something
                case value2:
                    //Do Something else
            }
        }
    }
}
于 2013-04-04T15:05:15.290 に答える
2

をオンにしてintから、これを と一致させようとすることはできませんenum

メソッド署名をに変更した場合

public void aMethod(Enum position)

裸の列挙値(例value1)を使用すると、動作するはずです:

case value1:
于 2013-04-04T15:03:50.017 に答える
2

int パラメータを持つメソッドを必要とする抽象クラスからのオーバーライド

私はこれをします:

public enum Enum { value1, value2 }
public class InnerClass  {
  public void aMethod(int position) {
    Enum value = Enum.values()[position];
    switch (value) {
      case value1:
于 2013-04-04T15:06:44.670 に答える
0

aMethod は int を引数の型として使用しないでください。JDK6 より前では、Switch ステートメントで文字列を使用することもできませんでした。最初に要求されてから少なくとも 16 年が経過した Java SE 7 では、String ケースを含む switch ステートメントが実装されています。

また、各ケースの後に break ステートメントを忘れないでください。それ以外の場合は、すべてのケースが読み取られます。

public void aMethod(Enum position) {
 switch (position) {
                case value1:
                    System.out.println("I am Value 1");
                    break;
                case value2:
                    System.out.println("I am Value 1");
                    break;
 }
} 

それをテストするには、使用します

ob.aMethod(Enum.value1);

また

ob.aMethod(Enum.valueOf("value1"));
于 2013-04-04T15:38:03.653 に答える