Java 列表<&燃气轮机;vs列表<;?扩展对象>;
可能重复:Java 列表<&燃气轮机;vs列表<;?扩展对象>;,java,generics,Java,Generics,可能重复: 我发现List和list2=newarraylist(); List list4=新的ArrayList(); } } 两者都是相同的,因为Java中的所有对象都扩展了对象。我更喜欢列表,因为它更简洁。类似于MyClass为每个类扩展对象列表虽然我抄袭了Marko,对此我深表歉意,但他的评论是正确的答案 没有区别,因为隐式地每个类型扩展对象都很复杂 对于任何类型的变量T,规范规定 每个类型变量。。。有一个界限。如果没有为类型变量声明绑定,则假定为对象 有人会认为通配符也是如此,?应
我发现
List
和list2=newarraylist();
List list4=新的ArrayList();
}
}
两者都是相同的,因为Java中的所有对象都扩展了对象。我更喜欢列表
,因为它更简洁。类似于MyClass为每个类扩展对象
列表虽然我抄袭了Marko,对此我深表歉意,但他的评论是正确的答案
没有区别,因为隐式地每个类型扩展对象都很复杂
对于任何类型的变量T
,规范规定
每个类型变量。。。有一个界限。如果没有为类型变量声明绑定,则假定为对象
有人会认为通配符也是如此,?
应该只是的简写?扩展对象
然而,通过搜索规范,根本没有证据表明通配符必须有上界(或下界)。“无界”?
与有界通配符的处理方式是一致的
我们可以从子类型规则中推断,List
和List
是一个可重新定义的类型,但是List[]xx={};
//失败
没有任何区别<代码>扩展对象
是冗余的,并且假设是其他的,就像编写类F扩展对象
一样。我敢打赌它们是等价的,因为Java中的所有类都隐式扩展对象
。没有任何区别,这是语言设计/语法的结果。我不知道对象是一个类而不是一个类型。您也可以查找PECS原则(生产者扩展消费者超级),但是,有一个给定一个泛型类型声明G,G大致类似于某个X@iccthedral-应用于列表
案例,List与某些XWell的List大致类似,是的。这是我的观点<代码>X好的,我找到了。也许我之前的评论不清楚;我的解释是存在X
,因此X@iccthedral当然List不是X=Object的List。但是每当使用List
类型的对象时,我们就知道它是一个List
对象,用于某个确定但未知的X
import java.util.ArrayList;
import java.util.List;
public class TestClass {
static void func1(List<?> o, Object s) {
o.add(null); // only null
o.add(s); // wrong
o.get(0); // OK
}
static void func2(List<? extends Object> o, Object s) {
o.add(null); // only null
o.add(s); // wrong
o.get(0); // OK
}
public static void main(String[] args) {
func1(new ArrayList<String>(), new Integer(1));
func2(new ArrayList<String>(), new Integer(1));
List<? extends Object> list1 = new ArrayList<Object>();
List<?> list2 = new ArrayList<Object>();
List<? extends Object> list3 = new ArrayList<String>();
List<?> list4 = new ArrayList<String>();
}
}
// ok
List<?>[] xx = {};
// fail
List<? extends Object>[] yy = {};
// ok
boolean b1 = (y instanceof List<?>);
// fail
boolean b2 = (y instanceof List<? extends Object>);