В последнее время я много делаю с отражением и реализовал этот небольшой полезный метод. Я с удивлением обнаружил, что первая версия не компилируется, но последняя делает.неожиданная ошибка компиляции, получающая класс массива класса
не компилируется:
public static <T> Class<T[]> getArrayClassOfType(Class<T> componentType) {
return Array.newInstance(componentType, 0).getClass();
}
Собирает и работает просто отлично:
public static <T> Class<T[]> getArrayClassOfType(Class<T> componentType) {
Class c = Array.newInstance(componentType, 0).getClass();
return c;
}
Два вопроса: что случилось с ним? есть ли лучший способ сделать это?
Вот ошибка компиляции из первого:
TypeUtils.java:[12,60] incompatible types: java.lang.Class<capture#1 of ? extends java.lang.Object> cannot be converted to java.lang.Class<T[]>
Ах. Я попробовал это, но intellij все еще был расстроен (красное подчеркивание о неконвертируемых типах) даже с предупреждениями подавления. Кажется, я нашел ошибку. – RutledgePaulV
Если у вас есть актерский состав, все должно быть в порядке. Может быть, у вас IDE настроена на такое предупреждение, как ошибка? Я знаю, что вы можете сделать это в Eclipse. – MightyPork
Хм, я искал способы настроить уровень на такой ошибке, но не нашел его. Я также вижу, что jetbrains исправил случай (здесь http://youtrack.jetbrains.com/issue/IDEA-105846) как это как ошибка раньше, поэтому я отправлю его. – RutledgePaulV