假设我有一个抽象泛型类:
public abstract class QuestionObject<T extends Answerable<?>> {
public abstract T returnAnswerable();
public abstract void renderQuestionLayout(T answer);
}
和一个配套的通用类:
public interface Answerable<T> {
...
}
我有一堆扩展QuestionObject的子类,并且有自己特定的Answerable。例如,TrueFalseQuestion将使用TrueFalseAnswer声明:
public class TrueFalseQuestion extends QuestionObject<TrueFalseAnswer> {
...
}
让我们看看我想在QuestionObject级别调用renderQuestionLayout方法。那可能吗?类似的东西:
QuestionObject<?> q = getCurrentQuestion();
Answerable<?>a = getAnswer();
q.renderQuestionLayout(a);
不起作用。
答案 0 :(得分:1)
查看最后一段代码:
QuestionObject<?> q = getCurrentQuestion();
Answerable<?>a = getAnswer();
q.renderQuestionLayout(a);
?
通配符无助于编译器确定要调用的renderQuestionLayout
版本。现在,q
是抽象父类的实例,其中方法具有抽象声明。
你需要显式地转换为适当的子类类型,或者重新考虑你的设计,这样你就不会在任何地方进行转换:p