-2

私が勉強している試験が近づいています..そして、次の質問に答えるエレガントな方法を考えていまし

上記の初期化はできません。コンパイルはできますが、宣言に識別子がなく、追加、削除などの他の機能は使用できません。

質問..

次のコード スニペットを検討してください。1行目で行ったように、Objectとして宣言された変数にArrayListのインスタンスを割り当てることは可能ですか? 説明。

  Object strings = new ArrayList();

  strings.toString();

これに答える他の方法は何ですか?ウィキペディア/リソースを提供してください。コンパイラがこれをバイトコードに変換する方法をさらに調査できますか? ありがとうございました

4

2 に答える 2

2

次のコード スニペットを検討してください。1行目で行ったように、Objectとして宣言された変数にArrayListのインスタンスを割り当てることは可能ですか? 説明。

   Object strings = new ArrayList();

   strings.toString();

はい、可能です。 ObjectのスーパータイプですArrayList(実際、Object はすべての Java 参照タイプのスーパータイプです)。割り当てられた実際の型のスーパー型である変数を宣言することは正当です。

Listの具体的な実装でを定義すると、同様の状況が発生しますArrayList

  List<String> list = new ArrayList<String>();
于 2012-06-05T03:41:39.843 に答える
1

コンパイルはできますが (試してみましたか?)、結果の ArrayList は Object として宣言されているため使いにくいです。たとえば、次の行です。

strings.add("hello");

add() は Object 型に対して定義されていないため、コンパイルされません。でも、

((List)strings).add("hello");

コンパイルします。

于 2012-06-05T03:43:13.060 に答える