相关疑难解决方法(0)

List <Object>和List <?>之间有什么区别

以前你把我烧死了,我必须说我多次搜索这个问题,我仍然无法理解List <Object>和List <?>之间的区别

我读过的所有书都说在Java中,每个类都隐含着Object的子类.

但是我在这里看到了以下代码:

public static void printList(List<Object> list) {
    for (Object elem : list)
        System.out.println(elem + " ");
    System.out.println();
}
Run Code Online (Sandbox Code Playgroud)

这段代码是错误的(故意用于教育目的),根据作者的原因是:

[...]只打印一个Object实例列表; 它不能打印List <Integer>,List <String>,List <Double>等,因为它们不是List <Object>的子类型

解决方案是:

public static void printList(List<?> list) {
    for (Object elem: list)
        System.out.print(elem + " ");
    System.out.println();
}
Run Code Online (Sandbox Code Playgroud)

如您所见,唯一的区别是第一行:

public static void printList(List<Object> list) {
public static void printList(List<?> list) {
Run Code Online (Sandbox Code Playgroud)

这就是我的问题的原因:List <Object>和List <?>之间有什么区别?

毕竟是对象超类的全部与否?

如果有人可以帮我一个简单的解释(我是Java的新手),我将不胜感激.

先感谢您.

java

29
推荐指数
3
解决办法
1万
查看次数

了解在java中使用泛型

我试图理解类泛型如何工作,这一点对我来说没有意义.

例如,如果我有以下类:

class A<E> {
    void go (E e) { } 
}

class B extends A { }
Run Code Online (Sandbox Code Playgroud)

然后我试试

A<? extends A> a1 = new A<A>();
A<? extends A> a2 = new A<B>();

a1.go(new A()); // i get a compiler error
a2.go(new B()); // i get a compiler error
Run Code Online (Sandbox Code Playgroud)

go方法不应该接受A或A的任何子类吗?

谢谢 :)

java generics

6
推荐指数
1
解决办法
304
查看次数

为什么我不能将具有其他类型的实例分配给参数化变量?

为什么我不能这样做:

LinkedList<Fruit> myFruits = new LinkedList<Apple>();
Run Code Online (Sandbox Code Playgroud)

错误信息:

Type mismatch: cannot convert from LinkedList<Apple> to LinkedList<Fruit>
Run Code Online (Sandbox Code Playgroud)

以下区别在哪里?

Fruit fruit = new Apple();
Run Code Online (Sandbox Code Playgroud)

java generics

2
推荐指数
1
解决办法
93
查看次数

为什么我不能将Object类型的对象添加到List <?>中?

据我所知,a List<?>被定义为一些特定但未知类型列表.因此无论参数类型是什么List,它都应该扩展,Object因为在Java中你不能有任何不扩展的类型Object.那么为什么以下代码无法编译?它是如何违反the的不变量的?listObj

    List<?> listObj = returnSomeList();
    listObj.add(new Object()); //Why does this not work ?
Run Code Online (Sandbox Code Playgroud)

java generics

2
推荐指数
1
解决办法
140
查看次数

为什么List <Object> list = new ArrayList <String>()这会给出TypeMismatch错误

List<Object> list = new ArrayList<String>()
Run Code Online (Sandbox Code Playgroud)

当我使用上面的行编译器给我类型不匹配错误.但正如我所理解的,Object是String的超类,如果我创建了对象列表,那么它也应该接受String.那么为什么上述陈述是错误的.我正在寻找解释.

java collections arraylist java-6

1
推荐指数
1
解决办法
2万
查看次数

标签 统计

java ×5

generics ×3

arraylist ×1

collections ×1

java-6 ×1