Я хотел бы реализовать функцию как с генераторами, так и с 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
}
}
Цель состоит в том, чтобы утверждать, что все параметры, переданные этой функции, являются объектами класса, расширяющими класс, указанный в качестве первого параметра. Таким образом, две первые строки основного метода будут скомпилированы, а третий - ошибка.
Мой вопрос: Почему я получаю "Тип безопасности: генерируется общий массив класса для параметра varargs" для первых двух строк?
Я что-то пропустил?
Дополнительный вопрос:, как его переделать, чтобы это предупреждение не отображалось в каждой строке, вызывающей функцию doNastyThingsToClasses? Я могу изменить его на "doNastyThingsToClasses (класс <A> parent, Class <? > ... classes)" и избавиться от предупреждений, но это также удаляет проверку типа времени компиляции - не так хорошо, если я хочу обеспечить правильное использование этой функции. Любое лучшее решение?