【发布时间】:2010-06-22 20:04:36
【问题描述】:
我想用泛型和可变参数实现一个函数。
public class Question {
public static <A> void doNastyThingsToClasses(Class<A> parent, Class<? extends A>... classes) {
/*** something here ***/
}
public static class NotQuestion {
}
public static class SomeQuestion extends Question {
}
public static void main(String[] args) {
doNastyThingsToClasses(Object.class, Question.class, SomeQuestion.class); // OK
doNastyThingsToClasses(Question.class, SomeQuestion.class); // OK
doNastyThingsToClasses(Question.class, Object.class, SomeQuestion.class); // compilation failure
}
}
这里的目的是断言传递给这个函数的所有参数都是类对象,扩展了作为第一个参数给出的类。所以 main 方法的前两行会编译,而第三行会产生错误。
我的问题是:为什么我在前两行收到“类型安全:为可变参数参数创建了一个类的通用数组”消息?
我错过了什么吗?
附加问题:如何重新设计它以防止在调用“doNastyThingsToClasses”函数的每一行上显示此警告?我可以将其更改为“doNastyThingsToClasses(Class parent, Class>... classes)”并消除警告,但这也消除了编译时类型检查 --- 如果我想这样做就不太好确保正确使用此功能。有更好的解决方案吗?
【问题讨论】:
标签: java generics types variadic-functions