Java generics and varargs
我想实现一个同时具有泛型和varargs的函数。
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
}
}
此处的目的是断言传递给此函数的所有参数都是扩展作为第一个参数给出的 Class 的 Class 对象。因此,main 方法的前两行将编译,第 3 行将生成错误。
我的问题是:为什么我在前两行收到“类型安全:为varargs参数创建了类的泛型数组”消息?
我在这里错过了什么吗?
附加问题:如何重新设计它以防止此警告显示在调用“doNastyThingsToClasses”函数的每一行上?我可以把它改成“doNastyThingsToClasses(Class<A> parent, Class<?>...classes)“并摆脱警告,但这也消除了编译时类型检查---,如果我想确保正确使用这个函数,那就不太好了。有没有更好的解决方案?