考虑下面的Java代码,它尝试实例化一些List
:
List<String> list1 = new ArrayList<String>();
List<String> list2 = new ArrayList<>();
List<String> list3 = new ArrayList<String>() { };
List<String> list4 = new ArrayList<>() { };
List<String> list5 = new ArrayList<Integer>() { };
list1
并且list2
很简单;list2
在Java 7中使用新的Diamond运算符来减少不必要的类型参数重复。
list3
是list1
使用匿名类的一种变体,可能会覆盖的某些方法ArrayList
。
list4
尝试使用菱形运算符,类似于list2
,但这是编译错误,消息 “ <>”不能与匿名类一起使用。
list5
产生一个错误,证明编译器知道实际需要的类型。错误消息是 类型不匹配:无法从新的ArrayList
因此,使用的声明list4
,为什么diamond运算符不能与匿名类一起使用?这里有一个类似的问题,其答案被接受,其中包含来自JSR-334的以下解释:
不支持将Diamond与匿名内部类一起使用,因为这样做通常需要扩展类文件签名属性以表示不可表示的类型,这实际上是JVM的更改。
我需要一些帮助来理解这种推理。为什么显式类型与相同的且显然容易推断的类型在生成的类文件中需要任何区别?“一般这样做”将涵盖什么困难的用例?
在“ Project Coin”邮件列表中对此进行了讨论。本质上(强调我的):
在内部,与可以在Java程序中显式记录的类型相比,Java编译器可以处理更丰富的类型集。无法在Java程序中编写的编译器内部类型称为不可指定类型。菱形使用推论的结果可能会出现不可表示的类型。
因此,不支持将Diamond与匿名内部类一起使用,因为这样做通常需要扩展类文件签名属性以表示不可表示的类型,这实际上是JVM的更改
。只要推断出的类型是可表示的,将来的平台版本就可以在创建匿名内部类时允许使用菱形。
请注意,Java 8也不支持它,但是它将作为Java
9的新功能(“铣削项目硬币”的第3项)包括在内。
考虑这个java代码,它试图实例化一些<代码>列表< /C> 和很简单;在Java7中使用新的菱形运算符来减少类型参数的不必要重复。 是使用匿名类的的变体,可能会重写的某些方法。 试图使用菱形运算符,类似于list2,但这是一个编译错误 产生一个错误,证明编译器知道实际需要什么类型。错误消息是类型不匹配:无法从新ArrayList转换 那么,有了的声明,为什么菱形运算符不能与匿名类一起使用呢?这里
问题内容: 我目前正在与Sierra&Bates一起准备S(O)CJP。 关于内部类(局部或匿名方法),他们说我们无法访问局部变量,因为它们在类驻留在堆上时仍位于堆栈中,并且可以由方法返回,然后尝试访问这些变量由于该方法已结束,因此它们已在堆栈中,但已不存在… 众所周知,我们可以使用final关键字来绕开它。这就是他们在书中所说的,但是他们并没有真正解释final关键字的作用……据我所知,在方法局
本文向大家介绍为什么BINARY关键字与MySQL REGEXP运算符一起使用?,包括了为什么BINARY关键字与MySQL REGEXP运算符一起使用?的使用技巧和注意事项,需要的朋友参考一下 使用BINARY关键字强制REGEXP将字符串作为二进制字符串进行匹配。我们将在这里看到区别。 让我们首先创建一个表- 使用insert命令在表中插入一些记录。我们在这里有不同情况的名字- 使用selec
targetPixValList是一个包含Double对象的列表,它也包含列表中连续位置的相似值,当我尝试使用Code_1比较两个Double值时,cnt返回零。当我使用code_2时,cnt返回值。 列表的类型是 为什么“==”运算符不能与Double一起使用? 代码_1: Code_2:
问题内容: 我正在使用ApplicationTestCase测试一个Android应用程序。我想模拟我的AsyncTasks之一(示例简化为显示问题): 因此,为了设置测试,我做了以下工作: 然后,实际测试如下: 但是运行时出现异常: 为什么模拟AsyncTask的技术不起作用? 请注意,在这种简单情况下,删除会导致问题消失,但是对于我的实际测试,我确实需要创建应用程序。 问题答案: AsyncT
问题内容: 在下面的代码中,我试图使h1元素具有最高利润。当我在css中将位置设置为inline时,未显示上边距。但是,当我将其更改为inline-block时,它确实可以。我想知道是否有人可以解释为什么会这样。谢谢。 这是我的HTML: 这是CSS 问题答案: CSS2规范的9.2.4节规定: inline-block 此值使元素生成一个 内联级块容器 。内联块的内部被格式化为块框,元素本身被格