我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的引用
没有区别,如果您使用的是java 7,那么您更喜欢第二种方法,但它在java 6中不可用。它是Java7的新添加。
第二种方法在Java6中是不可能的。这是在Java7中推断泛型实例的新方法。
正如已经指出的,方式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类名字符串,这些字符串将重复应用于这些元素。如果要对