Я выполняю рефакторинг чужого кода, и они используют тип Enum<?>
в нескольких местах. Было бы очень трудно избавиться от него, и похоже, что оно должно быть совместимо с неуниверсальным объявлением типа Java Enum, поскольку им обоим нечего сказать о параметре типа универсальному типу.
Я создал этот фрагмент кода, чтобы продемонстрировать проблему с ошибками компиляции, указанными в комментариях:
enum Shapes {
SQUARE,
CIRCLE
};
enum Colors {
RED,
BLUE,
GREEN
};
public void testEnumConversions() throws Exception {
List<Enum<?>> colors = ImmutableList.<Enum<?>>of(Colors.RED, Colors.GREEN, Shapes.SQUARE);
List<Enum> colors2 =
ImmutableList.<Enum<?>>of(Colors.RED, Colors.GREEN); // incompatible types
List<Enum> colors3 =
(List<Enum>)ImmutableList.<Enum<?>>of(Colors.RED, Colors.GREEN); // inconvertible types
List<Enum> colors4 = ImmutableList.<Enum>of(Colors.RED, Colors.GREEN, Shapes.SQUARE);
List<Enum<?>> colors5 = ImmutableList.of(Colors.RED, Colors.GREEN, Shapes.SQUARE);
List<Enum> colors6 =
ImmutableList.of(Colors.RED, Colors.GREEN, Shapes.SQUARE); // incompatible types;
}
Почему List<Enum<?>>
не совместимо с List<Enum>
? Они кажутся мне идентичными.