在抽象级别调用泛型Java函数

时间:2013-11-19 06:31:57

标签: java generics

假设我有一个抽象泛型类:

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);

不起作用。

1 个答案:

答案 0 :(得分:1)

查看最后一段代码:

QuestionObject<?> q = getCurrentQuestion();
Answerable<?>a = getAnswer();
q.renderQuestionLayout(a);

?通配符无助于编译器确定要调用的renderQuestionLayout版本。现在,q是抽象父类的实例,其中方法具有抽象声明。

你需要显式地转换为适当的子类类型,或者重新考虑你的设计,这样你就不会在任何地方进行转换:p