相关疑难解决方法(0)

了解上限和下限?在Java泛型中

我真的很难理解外卡参数.我有几个问题.

  1. ?作为类型参数只能在方法中使用.例如:printAll(MyList<? extends Serializable>)我无法使用?类型参数定义类.

  2. 我理解上限?. printAll(MyList<? extends Serializable>)意思是:" 如果它有实现接口的对象,printAll将打印.MyListSerialzable "
    我有一个问题super.printAll(MyList<? super MyClass>)意思是:" 如果它有对象或任何扩展的类(后代),printAll将打印.MyListMyClassMyClassMyClass "

在我出错的地方纠正我.

总之,只有TEKVN可以用作类型参数用于定义通用类.?只能用于方法


更新1:

public void printAll(MyList<? super MyClass>){
    // code code code
}
Run Code Online (Sandbox Code Playgroud)

根据Ivor Horton的书,MyList<? super MyClass>意味着MyList如果它具有MyClass它实现的对象或任何接口或类,我可以打印.也就是说,MyClass是一个下限 …

java generics subclass superclass

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

Java下界通配符

我正在努力解决这个问题,并且想知道是否有人可以解释原因.

我有三个班:员工,人和天使.

员工延伸人和人延伸天使.

当我尝试执行此代码时

class Angel {}
class Person extends Angel {}
class Employee extends Person {}
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

在类型List中添加(捕获#5-of?super Person)的方法不适用于参数(Angel)

我一直在阅读文档<? super X >意味着任何类型的X或X的超类(所以在我的情况下,Angel是Person的超类)并且应该被允许?显然不是!

有没有人有任何简单的例子?

java wildcard

15
推荐指数
2
解决办法
4946
查看次数

泛型 - 为什么可以将 T 的子级添加到 List&lt;?超级T&gt;

摘自/sf/answers/1346223371/

public class Test {

    public class A {}

    public class B extends A {}

    public class C extends B {}

    public void testContraVariance(List<? super B> myBlist) {
        B b = new B();
        C c = new C();
        myBlist.add(b);
        myBlist.add(c);
        A a = myBlist.get(0); // does not compile
    }
}
Run Code Online (Sandbox Code Playgroud)

如果 myBlist 接受 B 的超类型,这意味着 B 或 up,那么为什么还可以像中那样向它添加一个子类型myBlist.add(c)

java generics collections

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

标签 统计

java ×3

generics ×2

collections ×1

subclass ×1

superclass ×1

wildcard ×1