特殊な型のインスタンスを指すクラス型変数を宣言する場合、オブジェクト型は宣言ではなくインスタンス化によって決定されます。例:
Object o = new ArrayList<>();
if(o instanceof ArrayList)
System.out.println("ArrayList it is!");
したがって、ArrayList は Object のメソッドとプロパティしか使用できません。この場合は、たとえダウンキャストしたとしてもです。ArrayList を部分的にしか実装できないのはどうしてですか? また、型を Object にした方が理にかなっているでしょうか?
また、そもそもジェネリック宣言がなくてもダイヤモンド推論を使用できるのはなぜですか?