相关疑难解决方法(0)

怎么用<?扩展SomeObject>而不是<SomeObject>

所以我查看了一些Java代码并偶然发现:

List<? extends SomeObject> l;
Run Code Online (Sandbox Code Playgroud)

基本上这个列表接受SomeObject的某些对象 - SomeObject本身或其继承者.但是根据多态性,它的继承者也可以像SomeObject一样,所以这也可以:

List<SomeObject> l;
Run Code Online (Sandbox Code Playgroud)

那么,当第二个选项明确定义并且几乎相同时,为什么有人会使用第一个选项?

java generics polymorphism

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

我如何将`MyClass`添加到`List <?扩展MyClass>`

我有一个Java类,其中包含扩展MyClass的Objects子项.

class MyClass {
List<? extends MyClass> items;
[...]
Run Code Online (Sandbox Code Playgroud)

出于某种原因,我无法将MyClass项插入此列表.我不明白为什么,以及如何绕过这个问题.例如:

void foo(){
  items = new LinkedList<MyClass>(); // This is OK
  items.add(new MyClass()); // Not allowed... why?
}
Run Code Online (Sandbox Code Playgroud)

编译器说" 类型List中的方法add(capture#1-of?extends MyClass)不适用于参数(MyClass)"

我真的不明白如何绕过这个问题,以及为什么编译器应该只接受一个必须扩展MyClass的类型.

注意:为什么我需要使用这种方法?因为我需要允许MyClass的扩展包含子项列表.

java generics inheritance extends

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

整数扩展数字但不能操作<?使用Integer扩展Number>

整数扩展数字,为什么我在底部得到错误?

interface Predicate<T> {
   public abstract boolean check(T t);
}

Predicate<? extends Number> predUpper = null;

predUpper.check(new Integer(73));
Run Code Online (Sandbox Code Playgroud)

错误:谓词类型中的方法检查(捕获#6-of?extends Number)不适用于参数(整数)

我读过:类型Map <String中的方法,捕获#1-of?extends Object>不适用<?超级T>和<?在Java中扩展T>

java generics extends interface

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

标签 统计

generics ×3

java ×3

extends ×2

inheritance ×1

interface ×1

polymorphism ×1