你能向我解释一下这里发生了什么,为什么它没有错误。
List list = new ArrayList<String>();
list.add(1);
很抱歉,如果已经有类似的问题,我没有正确地表达这个问题,所以不能用谷歌搜索它
引用的泛型很重要。所以
List list = new ArrayList<String>();
毫无意义。一定是
List<String> list = new ArrayList<String>();
如果没有为引用类型(而不是实际的对象类型)提供at泛型,则将其视为对象
。所以你可以添加任何内容。
泛型也是一种编译时现象。所以当你说它是如何工作的时候,它意味着你的代码是如何编译而没有编译错误的。原因很简单,没有泛型与引用对象相关联,因此被视为对象(默认)。
使用原始类型列表
大致相当于使用列表
list.add(1);
自动框一个
整数
添加到List
这里发生的事情暴露了类型擦除的弱点,这是Java泛型背后的机制。当您更改其泛型类型参数时,ArrayList的实现不会改变:它总是java.lang.场景背后的对象。
由于在声明列表时没有给接口提供类型参数,编译器允许您添加任何类型的对象,而不仅仅是Strings。特别是,int被自动装箱到java.lang.整数中,因此1的值可以添加到您的列表中。
这可能是一个愚蠢的问题,所以请原谅我的无知。 如果我用: 编译器说foo.execute(val)是一个错误。带有一条沿着setWrapped方法(bar )行的消息,类型为foo 不适用于参数(bar )。 如果我想把福变成
这可能是一个非常愚蠢的问题,但我不明白编译器为什么抱怨和编译。 我有两个非常简单的课程: 现在代码是: 我知道它为什么起作用。 块2,我有
本文向大家介绍Java泛型详解,包括了Java泛型详解的使用技巧和注意事项,需要的朋友参考一下 1. Why ——引入泛型机制的原因 假如我们想要实现一个String数组,并且要求它可以动态改变大小,这时我们都会想到用ArrayList来聚合String对象。然而,过了一阵,我们想要实现一个大小可以改变的Date对象数组,这时我们当然希望能够重用之前写过的那个针对String对象的Arra
我在Spring批处理StepBuilder类中看到了以下方法定义。这里第一个角括号有什么用?
本文向大家介绍初步理解Java的泛型特性,包括了初步理解Java的泛型特性的使用技巧和注意事项,需要的朋友参考一下 在Java SE1.5中,增加了一个新的特性:泛型(日本语中的总称型)。何谓泛型呢?通俗的说,就是泛泛的指定对象所操作的类型,而不像常规方式一样使用某种固定的类型去指定。泛型的本质就是将所操作的数据类型参数化,也就是说,该数据类型被指定为一个参数。这种参数类型可以使用在类、接口以及方
问题内容: 我有一个代表文本片段的泛型类。该文本片段可能具有多种不同模式(突出显示的不同类型)中的任何一种。这些模式用枚举表示。每个项目的Enum可能不同,但是它必须实现一个接口,该接口提供了一种将其中两个结合的方法(可以突出显示并加粗显示)。所以我有一个界面: 然后我的TextFragment是文本字符串和模式的容器。但是当我尝试声明该类时: 我收到以下错误: 令牌“扩展”的语法错误,预期 根据