Java通用通配符:如果需要?扩展T,what';T怎么了? 受保护列表
编译器不知道Java通用通配符:如果需要?扩展T,what';T怎么了? 受保护列表,java,generics,Java,Generics,编译器不知道getErrors将返回集合;它可能会返回一个集合。如果随后尝试将不属于此子类的ErrorTo添加到集合中,则会违反类型安全性。因此,编译器不允许您这样做。编译器不知道getErrors将返回集合;它可能会返回一个集合。如果随后尝试将不属于此子类的ErrorTo添加到集合中,则会违反类型安全性。由于这个原因,编译器不允许您这样做。您不能向列表添加任何内容您不能向列表添加任何内容列表列表这可能会有所帮助。假设我们有课 protected List<? extends Err
getErrors
将返回集合
;它可能会返回一个集合
。如果随后尝试将不属于此子类的ErrorTo
添加到集合中,则会违反类型安全性。因此,编译器不允许您这样做。编译器不知道getErrors
将返回集合
;它可能会返回一个集合
。如果随后尝试将不属于此子类的ErrorTo
添加到集合中,则会违反类型安全性。由于这个原因,编译器不允许您这样做。您不能向列表添加任何内容您不能向列表添加任何内容列表列表这可能会有所帮助。假设我们有课
protected List<? extends ErrorTO> errors = new ArrayList<ErrorTO>();
public abstract Collection<? extends ErrorTO> getErrors();
public void registerError(ErrorTO e) {
errors.add(e);
}
我们想要创建这样的方法
class Fruit {}
class Pear extends Fruit{ void methodA(){} }
class Apple extends Fruit{ void methodB(){} }
如果参数是newarraylist()代码>则编译器不应允许添加诸如水果或苹果之类的元素
但编译器不知道他将处理什么样的列表。由于缺乏知识,不可能通过List添加任何元素,这可能会有所帮助。假设我们有课
protected List<? extends ErrorTO> errors = new ArrayList<ErrorTO>();
public abstract Collection<? extends ErrorTO> getErrors();
public void registerError(ErrorTO e) {
errors.add(e);
}
我们想要创建这样的方法
class Fruit {}
class Pear extends Fruit{ void methodA(){} }
class Apple extends Fruit{ void methodB(){} }
如果参数是newarraylist()代码>则编译器不应允许添加诸如水果或苹果之类的元素
但编译器不知道他将处理什么样的列表。由于缺乏知识,无法通过list添加任何元素。您的意思是不知道如何正确使用泛型吗?这不是语言的问题。Java教程中关于通配符的页面中给出了一个几乎相同的示例(和解释):。不可能给出解决方案,因为我们不知道您想要实现什么。为什么要在这里使用通配符?@user1329572:OP的意思可能是“没有按预期工作”?这里没有冒犯的必要。你不是说你不知道如何正确使用泛型吗?这不是语言的问题。Java教程中关于通配符的页面中给出了一个几乎相同的示例(和解释):。不可能给出解决方案,因为我们不知道您想要实现什么。为什么要在这里使用通配符?@user1329572:OP的意思可能是“没有按预期工作”?这里没有冒犯的必要。“你不能添加任何东西”除了null
“你不能添加任何东西”除了null
“不可能添加任何元素”除了null
@newacct你是对的,但我不想提及它以使示例更容易理解:)“不可能添加任何元素”除了null
@newacct之外,您是对的,但我不想提及它以使示例更容易理解:)