1. List<String> res = new ArrayList<>();
2. List<String> res = new ArrayList<String>();
3. List<> res = new ArrayList<String>();
(1) List<String>和 ArrayList<String>的 <String>作用一样吗?
✅ 作用一样,都是 指定集合存储 String类型。
-
List<String>(左侧):声明变量res是一个 List接口,并且 只能存String。 -
ArrayList<String>(右侧):实际创建的对象是ArrayList(List的实现类),并且 只能存String。 -
new ArrayList<>() 的<>里面可以不写String,编译器会 自动根据左侧的List<String>推断 成ArrayList<String>。 -
效果和
new ArrayList<String>()完全一样,但 代码更简洁。
(2) 为什么右侧 <>可以不写 String?
✅ Java 7+ 支持 "钻石操作符" <>(类型推断):
-
new ArrayList<>() 的<>里面可以不写String,编译器会 自动根据左侧的List<String>推断 成ArrayList<String>。 -
效果和
new ArrayList<String>()完全一样,但 代码更简洁
但是3却不行
(1) 错误原因:左侧 List<>的泛型未指定
-
List<> 中的 <>是空的,没有指定泛型类型(如String、Integer)。 -
Java 要求泛型必须明确指定类型(比如
List<String>、List<Integer>),不能省略(除非是 右侧的<>类型推断)。
(2) 正确的语法规则
-
左侧(声明变量):
List<类型>必须明确指定泛型类型(如List<String>)。 -
右侧(创建对象):
new ArrayList<>()可以省略泛型类型(Java 7+ 支持类型推断)。
259

被折叠的 条评论
为什么被折叠?



