相关疑难解决方法(0)

差异<?超级T>和<?在Java中扩展T>

List<? super T>和之间有什么区别List<? extends T>

我曾经使用List<? extends T>,但它不允许我添加元素list.add(e),而List<? super T>它.

java generics collections

751
推荐指数
10
解决办法
21万
查看次数

<?有什么区别?超级E>和<?延伸E>?

<? super E>和之间有什么区别<? extends E>

例如,当你看一下类时java.util.concurrent.LinkedBlockingQueue,构造函数有以下签名:

public LinkedBlockingQueue(Collection<? extends E> c)
Run Code Online (Sandbox Code Playgroud)

并为方法之一:

public int drainTo(Collection<? super E> c)
Run Code Online (Sandbox Code Playgroud)

java generics

135
推荐指数
7
解决办法
5万
查看次数

Java泛型(通配符)

我有几个关于Java中通用通配符的问题:

  1. List<? extends T>和之间有什么区别List<? super T>

  2. 什么是有界通配符,什么是无界通配符?

java generics bounded-wildcard

106
推荐指数
3
解决办法
7万
查看次数

使用'super'关键字绑定泛型

为什么我super只能使用通配符而不使用类型参数?

例如,在Collection界面中,为什么toArray方法不是这样写的

interface Collection<T>{
    <S super T> S[] toArray(S[] a);
}
Run Code Online (Sandbox Code Playgroud)

java generics language-design super

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

带有ArrayList的Java Generic <?扩展A>添加元素

我有课A,B,CD那里B延伸A,C扩展AD延伸A.

我有以下ArrayList几个,其中包含一些元素:

ArrayList<B> b;
ArrayList<? extends A> mix = b;
Run Code Online (Sandbox Code Playgroud)

我打算让变量mix包含类型的元素B,CD.我试图类型的元素加入Cmix这样的:

mix.add(anElementOfTypeC);
Run Code Online (Sandbox Code Playgroud)

但IDE不允许我这样做,它说:

通过调用转换的方法,无法将anElementOfTypeC转换为CAP#1,其中CAP#1是一个新的类型变量:CAP#1从捕获?延伸A.

我使用<? extends A>得当吗?我该如何解决这个问题?

java generics arraylist

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

如何从排序列表中获取第一个元素?

我曾经Collections.sort(playersList);排序过List.所以,我认为playersList现在已经整理好了.但是我怎样才能获得列表的第一个元素?playersList[0]不起作用.

java sorting list

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

<?超级E>和<?扩展E> for List

具有以下简单的类结构:

class A {
}

class B extends A {
}

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

我正在创建一个ArrayList来保存先前创建的类的对象:

List<? extends A> list1 = new ArrayList<A>();
List<? extends B> list2 = new ArrayList<B>();
List<? extends C> list3 = new ArrayList<C>();

List<? super A> list4 = new ArrayList<A>();
List<? super B> list5 = new ArrayList<B>();
List<? super C> list6 = new ArrayList<C>();
Run Code Online (Sandbox Code Playgroud)

对于每个列表,我正在尝试添加每个先前创建的类的1个对象:A,B,C.唯一可能的组合是:

  • 将类A,B,C的对象添加到list4

  • 将类B和C的对象添加到list5

  • 将类C的对象添加到列表list6.其余的尝试给出了编译器错误,例如:

类型List中的方法add(capture#1-of?extends A)不适用于参数(A)

为什么我不能将类A,B,C的任何对象添加到list1/2/3?为什么例如list4接受类A,B,C的对象,如果它们应该是A类的超类,因为list4是定义的?

java generics

18
推荐指数
1
解决办法
7176
查看次数

收藏中的泛型

这是我的计划.我不知道为什么我会收到编译时错误.

import java.util.ArrayList;
import java.util.List;

public class Test {
public static void main(String[] args) {
    List< ? extends Number > list = new ArrayList<Integer>();

    list.add(6); // Compile Time Error

    System.out.println(list);

  }
}
Run Code Online (Sandbox Code Playgroud)

但是以下程序运行正常

import java.util.ArrayList;
import java.util.List;

public class Test {
public static void main(String[] args) {
    List< ? super Number > list = new ArrayList<Number>();

    list.add(6); 

    System.out.println(list);

    }
}
Run Code Online (Sandbox Code Playgroud)

Eclipse出错:

以下是Eclipse的错误描述:

类型List中的方法add(int,capture#1-of?extends Number)不适用于参数(int)

java generics

15
推荐指数
1
解决办法
382
查看次数

泛型..?超级T

可能重复:
Java Generics中'super'和'extends'之间的区别是什么

一个)

List<? super Shape> shapeSuper = new ArrayList<Shape>();

shapeSuper.add(new Square());       //extends from SHAP  
shapeSuper.add(new DoubleSquare()); //extends from SQ  
shapeSuper.add(new TripleSquare()); //extends from DS  
shapeSuper.add(new Rectangle());    //extends from SHAP  
shapeSuper.add(new Circle());       //extends from SHAP  

for (Object object : shapeSuper) { ... }
Run Code Online (Sandbox Code Playgroud)

当我只能添加Shape及其衍生物时,为什么迭代必须是Objects?

B)

List<? super Shape> shapeSuper = new ArrayList<Object>();  

shapeSuper.add(new Object()); //compilation error  
Run Code Online (Sandbox Code Playgroud)

为什么上面的行会产生编译错误?

java generics

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

Java多个泛型集合参数编译错误

这么奇怪!请先查看代码:

public class A {}

public class B extends A {}

public class C extends A {}

public class TestMain {

    public <T extends A> void test(T a, T b) {}

    public <T extends A> void test(List<T> a, List<T> b) {}

    public void test1(List<? extends A> a, List<? extends A> b) {}

    public static void main(String[] args) {
        new TestMain().test(new B(), new C());
        new TestMain().test(new ArrayList<C>(), new ArrayList<C>());
        new TestMain().test(new ArrayList<B>(), new ArrayList<C>());
        new TestMain().test1(new ArrayList<B>(), new ArrayList<C>());
    }
} …
Run Code Online (Sandbox Code Playgroud)

java generics collections compiler-errors

8
推荐指数
2
解决办法
2630
查看次数