0

特殊な型のインスタンスを指すクラス型変数を宣言する場合、オブジェクト型は宣言ではなくインスタンス化によって決定されます。例:

Object o = new ArrayList<>();
if(o instanceof ArrayList)
System.out.println("ArrayList it is!");

したがって、ArrayList は Object のメソッドとプロパティしか使用できません。この場合は、たとえダウンキャストしたとしてもです。ArrayList を部分的にしか実装できないのはどうしてですか? また、型を Object にした方が理にかなっているでしょうか?

また、そもそもジェネリック宣言がなくてもダイヤモンド推論を使用できるのはなぜですか?

4

3 に答える 3

2

あなたと私が電話で話している場合、あなたは私の声だけとやり取りしていますが、それは私の残りの部分が存在しなくなるという意味ではありません. そのArrayListをオブジェクトとしてインターフェースしていますが、ArrayListのすべての部分がまだあります-他の部分とインターフェースしていないだけです。

于 2013-04-27T22:27:28.207 に答える
1
Object O = new ArrayList<>();

この特定のコードは次のように述べています。o「型の参照変数を作成し、ヒープ上に作成されObjectた新しいオブジェクトを指すようにします。」ArrayList<>

instanceofjvm がコードを実行すると、条件がチェックされます。参照変数の型が であってもObject、実行中に作成される実際のオブジェクトはArrayListオブジェクトです。

参照変数ArrayList<>を使用する属性/メソッドのいずれかを使用しようとすると、たとえば; コンパイラはエラーをスローします。Objectoo.size()

于 2013-04-27T22:39:56.187 に答える