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>);