2

重複の可能性:
Javaの場合、switchステートメントのデータ型を長くできないのはなぜですか?

なぜそのようなことが不可能なのですか?

private void importantFunction( long arg1 ) {

    switch (arg1){
    case 0:
         // do stuff
        break;
    case 1:
         // do other stuff
        break;
    default:
        //do default stuff
        break;
    }
}

私が長い値を理解する方法では、それらと整数の間にそれほど大きな違いはないはずです。

4

4 に答える 4

5

Java 7の場合、文字列を使用できます:LINK TO ORACLE

だから基本的にこれは可能になりますString.valueOf(23423423L);

于 2012-12-19T11:36:54.967 に答える
5

Java には、非常に多くの機能がありました。言語設計は、実用性と複雑さの間のトレードオフの連続です。機能が多すぎると、言語の学習と実装が難しくなります。

明らかに、可能な値の数が少ない long を持つことができるので、これを switch 式として使用するのが合理的ですが、それは珍しいことです。主に、int の値が多すぎる場合に long が使用され、これまでのところ、switch 式の値が多すぎます。

1 つの解決策は、使用したい long の値を整数値の小さなセットにマップする Map です。

import java.util.HashMap;
import java.util.Map;

public class Test {
  public static void main(String[] args) {
    final int ONE_CASE = 3;
    final int ANOTHER_CASE = 4;
    Map<Long, Integer> map = new HashMap<Long, Integer>();
    map.put((long) 1e10, ONE_CASE);
    map.put((long) 1e11, ANOTHER_CASE);
    long arg1 = (long) 1e11;
    switch (map.get(arg1)) {
    case 3:
      System.out.println("ONE_CASE");
      break;
    case 4:
      System.out.println("ANOTHER_CASE");
      break;
    }
  }
}
于 2012-12-19T11:58:50.533 に答える
2

JVM の仕様には次 のように書かれています。Java 仮想マシンのテーブルスイッチとルックアップスイッチの命令は、int データに対してのみ動作します。

于 2012-12-19T11:35:15.100 に答える
0

Javaは、longに含めることができる限り、これらの多くのオプションを切り替えることを望まないため、intに制限しました。

于 2012-12-19T11:36:05.167 に答える