1

これは不可能だと思いますが、試してみましょう:

ArrayListの次元とリストのbottomtypeを出力するような方法でルーチンanalyzeArrayList()を書くことは可能ですか?

サンプル コードは次のように表示されます。

次元 = 2 および下の型 = クラス java.lang.Float
次元 = 3 および下の型 = クラス java.lang.Integer

パラメータ s は、他の型のインスタンスではなく、常に ArrayList のインスタンスであると仮定します。リストは空かもしれませんが、null ではないことに注意してください。

  void analyzeArrayList(Object s)
  {
    int dimension;
    String typeString;

    //<Some code here!>

    System.out.println("Dimension = "+dimension+" and Bottom type = "+typeString);
  }



  Object s = new ArrayList<ArrayList<Float>>();
  Object t = new ArrayList<ArrayList<ArrayList<Integer>>>();

  .
  . 
  analyzeArrayList(s);
  analyzeArrayList(t);

これに対するコメント:

フィールドを持つオブジェクトがある場合、それは面白いです

  ArrayList<ArrayList<Float>>

次に、メソッドを書くことができます

  void analyzeArrayList(Field s)

Field s が ArrayList を表していることがわかっている場合。

4

1 に答える 1

1

型消去のためできません。

Java は、コンパイル時にジェネリックのみを考慮します。List<String>andがある場合List<Integer>、コンパイラは、リストがさまざまなタイプのものであることを認識し、インスタンスごとにタイプセーフな環境を作成できるようにします。型消去のため、実行時には、両方のリストにオブジェクトが含まれており、互いに同等であると見なされます。

于 2013-01-19T00:56:56.993 に答える