当前位置: 首页 > 知识库问答 >
问题:

在Java6中使用右边的泛型?

公西志文
2023-03-14

我java 6我可以声明如下数组列表

方法1:使用泛型,即

List<Integer> p = new ArrayList<Integer>();

方法2:使用钻石操作符

List<Integer> p = new ArrayList<>();

方法3:仅在左侧使用通用

List<Integer> p = new ArrayList(); 

我更喜欢使用第三种方法作为它的简介。这些方法之间有什么区别吗?我们应该选择哪一种?为什么?

更新:-我知道在java 7中建议使用第二种方式,但我的问题是在java 6的上下文中。哪个更好?

对我来说,方法3也表示p是整数的数组列表(方法1也表达了同样的意思)。因此,除了IDE显示警告消息之外,我没有发现任何区别:

ArrayList是原始类型。对泛型类型ArrayList的引用


共有3个答案

丁子石
2023-03-14

没有区别,如果您使用的是java 7,那么您更喜欢第二种方法,但它在java 6中不可用。它是Java7的新添加。

满增
2023-03-14

第二种方法在Java6中是不可能的。这是在Java7中推断泛型实例的新方法。

杜君浩
2023-03-14

正如已经指出的,方式2在1.6中无效。所以问题是,方法1和方法3之间有什么区别吗。除了可读性,没有。

以下面的代码为例:

import java.util.*;
class G {
  public static void main(String [] args){
    List<Integer> listOne = new ArrayList<Integer>();
    listOne.add(1);
    int one = listOne.get(0);

    List<Integer> listTwo = new ArrayList();
    listTwo.add(1);
    int two = listTwo.get(0);
  }
}

使用javap-c

  public static void main(java.lang.String[]);
    Code:
    // FOR listOne
       0: new           #2                  // class java/util/ArrayList
       3: dup           
       4: invokespecial #3                  // Method java/util/ArrayList."<init>":()V
       7: astore_1      
       8: aload_1       
       9: iconst_1      
      10: invokestatic  #4                  // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      13: invokeinterface #5,  2            // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
      18: pop           
      19: aload_1       
      20: iconst_0      
      21: invokeinterface #6,  2            // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
      26: checkcast     #7                  // class java/lang/Integer
      29: invokevirtual #8                  // Method java/lang/Integer.intValue:()I
      32: istore_2      
   // FOR listTwo
      33: new           #2                  // class java/util/ArrayList
      36: dup           
      37: invokespecial #3                  // Method java/util/ArrayList."<init>":()V
      40: astore_3      
      41: aload_3       
      42: iconst_1      
      43: invokestatic  #4                  // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      46: invokeinterface #5,  2            // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
      51: pop           
      52: aload_3       
      53: iconst_0      
      54: invokeinterface #6,  2            // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
      59: checkcast     #7                  // class java/lang/Integer
      62: invokevirtual #8                  // Method java/lang/Integer.intValue:()I
      65: istore        4
      67: return        
}

我们可以看到,在这两种情况下产生的字节码完全相同。请注意,由于泛型没有在编译时烘焙,编译器在编译时检查信息后会将其丢弃,并添加checkcast指令,以确保检索对象时执行的强制转换是安全的。

 类似资料:
  • 我正在使用ActionBarDrawerToggle(导航抽屉),但我无法将其设置在右角(对于波斯语)。 这是我的activity\u main。xml代码: 这是我的活动课的相关代码: 我搜索过这个,我应该使用重力,但它在xml中不起作用。

  • 问题内容: 我正在使用GSON将JSON解码为T类型的对象,例如 但是,这将返回异常- java.lang.AssertionError:意外的类型。预期为以下之一:java.lang.reflect.ParameterizedType,java.lang.reflect.GenericArrayType,但得到:sun.reflect.generics.reflectiveObjects.Typ

  • 描述 (Description) 弹跳动画效果用于在击中后快速向上,向后或远离表面移动元素。 语法 (Syntax) @keyframes bounceInRight { 0% { opacity: 0; transform: translateX(2000px); } 60% { opacity: 1; transform: tr

  • 问题内容: 我需要一个在其右边具有较大笔触的h2。像这样: 我正在努力以最佳的响应方式来完成它。更不用说它在自定义WP主题中,因此我不想创建大量的页面标记,以使客户端立即中断:) 问题答案: 您需要一个元素和一个伪元素。PS它反应灵敏。 说明:在这里,主要部分是在元素上使用,然后使用带有属性的伪元素创建虚拟元素,并将其放置在设置为的父元素上。

  • 简短说明: 我在将mongo DB中的文档读入具有泛型属性的java类时遇到了困难。错误显示 ...但是当我试着从数据库里读... ...我得到以下异常: 我确实发现了一些关于泛型和morphia的讨论,但老实说,我不知道如何将这些应用到我的问题上。 我在运行Morphia 1.5.8

  • 问题内容: 如何将下面的所有内容对齐到最右边? 问题答案: 在渲染HTML表格。您基本上希望将其应用于所呈现的每个元素。使用当前代码,最简单的方法是应用以下代码: 当然,您也可以更加具体,例如,给出自己的规则并在CSS中定义一个规则(该规则将直接应用于呈现的HTML 元素)。 与 您还可以通过属性为每个元素提供自己的类,该属性接受逗号分隔的CSS类名字符串,这些字符串将重复应用于这些元素。如果要对