Java 区别列表是什么<;字符串>;列表=新建链接列表<&燃气轮机;()vs List=新建链接列表<;字符串>;()?

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

我在使用java泛型时发现了一个问题

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?