代码之家  ›  专栏  ›  技术社区  ›  gogogaga

初始化没有对象类型的arraylist-JAVA[重复]

  •  2
  • gogogaga  · 技术社区  · 8 年前

    这个问题不是关于为什么我们将列表初始化为实现上的接口,例如。

    List<myObject> obj = new ArrayList<myObject>();
    

    问题是以下两者之间有什么区别,为什么它们(显然)以相同的方式工作?

    //list and arraylist both have a type
    List<myObject> obj = new ArrayList<myObject>();
    
    //arraylist does not have a type
    List<myObject> obj = new ArrayList<>();
    
    2 回复  |  直到 8 年前
        1
  •  2
  •   cassiomolin    8 年前

    这两段代码是等效的,并创建 ArrayList 带a的s 类型 ( myObject 在您的示例中):

    List<myObject> obj = new ArrayList<myObject>();
    
    List<myObject> obj = new ArrayList<>();
    

    然而,第二个示例使用 菱形运算符 ( <> )在Java 7中介绍。它增加了类型推断并减少了赋值中的冗长。


    请参阅以下引用自 documentation :

    您可以替换调用构造函数所需的类型参数 具有空类型参数集的泛型类的( <> )只要 因为编译器可以从上下文推断类型参数。这 这对尖括号非正式地称为菱形。

    例如,考虑以下变量声明:

    Map<String, List<String>> myMap = new HashMap<String, List<String>>();
    

    在Java SE 7中,可以替换 类型参数集为空的构造函数( <> ):

    Map<String, List<String>> myMap = new HashMap<>();
    
        2
  •  1
  •   Stefan    8 年前

    在第二个示例中,Java假设类型为myObject。所以还有一种类型。