Java泛型和可变参数
Java泛型和可变参数
我想要实现一个同时使用泛型和可变参数的函数。
public class Question { public static void doNastyThingsToClasses(Class parent, Class extends A>... classes) { /*** 这里放一些代码 ***/ } public static class NotQuestion { } public static class SomeQuestion extends Question { } public static void main(String[] args) { doNastyThingsToClasses(Object.class, Question.class, SomeQuestion.class); // 正常 doNastyThingsToClasses(Question.class, SomeQuestion.class); // 正常 doNastyThingsToClasses(Question.class, Object.class, SomeQuestion.class); // 编译错误 } }
这里的意图是确保传递给该函数的所有参数都是继承自作为第一个参数给出的Class对象的Class对象。因此,main方法的前两行将编译通过,第三行将生成错误。
我的问题是:为什么前两行会显示“类型安全性:为varargs参数创建了一个泛型数组的Class”消息?
我在这里漏掉了什么吗?
附加问题:如何重新设计它以防止在调用“doNastyThingsToClasses”函数的每一行上显示此警告?我可以将其更改为“doNastyThingsToClasses(Class parent, Class>... classes)”并摆脱警告,但这也会删除编译时类型检查 --- 如果我想确保正确使用此函数,这并不好。有更好的解决方案吗?