Java 区别列表是什么<;字符串>;列表=新建链接列表<&燃气轮机;()vs List=新建链接列表<;字符串>;()?
我在使用java泛型时发现了一个问题Java 区别列表是什么<;字符串>;列表=新建链接列表<&燃气轮机;()vs List=新建链接列表<;字符串>;()?,java,Java,我在使用java泛型时发现了一个问题 List list = new LinkedList<String>(); list.add(MyObject); //No List List=newlinkedlist(); 列表。添加(MyObject)//不 提示任何编译错误。这不是我想要的 如果我使用: List<String> list = new LinkedList<>(); list.add(MyObject); //Prompt for comp
List list = new LinkedList<String>();
list.add(MyObject); //No
List List=newlinkedlist();
列表。添加(MyObject)//不
提示任何编译错误。这不是我想要的
如果我使用:
List<String> list = new LinkedList<>();
list.add(MyObject); //Prompt for compilation errors.This is what I want
List List=newlinkedlist();
列表。添加(MyObject)//提示编译错误。这是我想要的
我想知道他们之间的区别是什么
List List=new LinkedList()
和
List List=new LinkedList()
和
List List=new LinkedList()
和
List List=new LinkedList()
?List List=new LinkedList()代码>是否执行以下操作:
声明一个名为list
的变量,类型为list
使用类型参数String
将list
的值设置为步骤2的结果
因为列表
显然不会被赋予新的LinkedList()
,可以从第二部分删除类型参数,给出:List List=new LinkedList()代码>。这被称为“类型推断”。Java只能在编译时计算省略的类型时才能这样做
如果使用List List=newlinkedlist()
,您可以执行与上面完全相同的操作,只是新变量列表
不包含类型信息。这可能是危险的,因为它防止编译器在您执行可能导致类型错误的操作时警告/停止您
例如:
List<String> list = new LinkedList<>();
list.add("hello"); // works fine
list.add(123); // compile-time error
当您从列表中检索项目时,会出现此问题:
List list = new LinkedList<String>();
list.add(123); // allowed
Object obj = list.get(0); // is obj a String? is it an int?
List List=newlinkedlist();
列表。添加(123);//允许
Object obj=list.get(0);//obj是字符串吗?是整数吗?
这破坏了类型安全性,这可以说是使用Java的首要原因。大家好,我在使用Java泛型时发现了一个问题。List List=new LinkedList()List.add(MyObject),//不提示任何编译错误。如果我使用:List List=new LinkedList()List.add(MyObject),//提示编译错误。这是我想知道的,List=new LinkedList()与List List=new LinkedList()有什么区别vs List List=new LinkedList()vs List List=new LinkedList()?stackoverflow有一个post的bug没有。正常标记文本中的任何
字符都需要转义,否则它们可能被视为无法识别的html元素并被“解除防护”。解决方案:使用反引号或代码块。启用所有编译器警告并注意它们。编译器将告诉您为什么不能省略
。
List list = new LinkedList<String>();
list.add(123); // allowed
Object obj = list.get(0); // is obj a String? is it an int?