在Java变量声明中指定左侧和右侧的不同类型的目的是什么?
例如,像这样的代码是标准的:
List<String> l = new ArrayList<>();
为什么不:
ArrayList<String> l = new ArrayList<>();
或
Object l = new ArrayList<>(); // Silly example but shows two extremes
答案 0 :(得分:1)
List<String> l = new ArrayList<>();
允许您实例化
所有类型的List
,ArrayList
或LInkedList
String
。您可以使用List
ArrayList<String> l = new ArrayList<>();
您只能实例化ArrayList
的{{1}}。String
您无法使用Object l = new ArrayList<>();
方法。 答案 1 :(得分:1)
执行此操作时,您cannot use
会列出add()
,remove()
,addAll()
等操作。
Object l = new ArrayList<>();
在这里,你正在失去多态性的灵活性:
ArrayList<String> l = new ArrayList<>();// later you could not re-initialize
l = new LinkedList<String>();//compile time error