【发布时间】:2014-01-28 06:12:49
【问题描述】:
假设我有以下课程:
public abstract class AbstractClass {
...
}
public class ConcreteClass extends AbstractClass {
...
}
建设者:
public class Builder{
static public ConcreteClass build(){
...
}
}
以及其他一些类中的通用函数:
public <T extends AbstractClass> T myFunction(){
T a = Builder.build();
return a;
}
我的理解是编译器应该有足够的信息来允许这样的赋值,但是,它会抛出一个错误:
类型不匹配:无法从 ConcreteClass 转换为 T
为什么会这样?这种分配的潜在危险是什么?
【问题讨论】:
-
当您只想返回
AbstractClass时,为什么要尝试使其在 T 上通用? -
当您尝试使用具有继承的构建器模式时,this post here 可能会有所帮助,尽管在发布此帖子后我完全理解了该问题,因此该帖子中的位置有点错误。
-
可能例子有点太简单了,我只是想展示分配部分的例子,其他的都无关紧要。