У меня проблема с java 11 типом лямбда-выражения предиката generi c типа, когда я пишу предикат, поскольку лямбда-выражение не возвращает точно параметр generi c, и возникает ClassCastException
, код показан ниже
Объяснение Когда мы пишем лямбда-выражение, Generi c Метод параметров getGenericInterfaces () [0] -> ClassCastException встречается в этой строке, потому что не обнаруживается параметр generi c, когда я отлаживаю код, рассматриваемый как просто Условие не Условие <>, в любом случае, когда мы определяем предикат, как показано ниже (рабочий случай), его рабочий
Рабочий случай
Condition<Integer> oddValueCondition = new Condition<Integer>() {
@Override
public boolean test(Integer integer) {
return integer % 2 == 0;
}
};
Не рабочий случай
Condition<Integer> oddValueCondition = integer -> integer % 2 == 0;
определение интерфейса
@FunctionalInterface
public interface Condition<T> extends Predicate<T> {
default Class<T> getParameterType() {
ParameterizedType parameterizedType = (ParameterizedType) this.getClass().getGenericInterfaces()[0];
Type[] typeArguments = parameterizedType.getActualTypeArguments();
Class<T> type = (Class<T>) typeArguments[0];
return type;
}
}
Test
oddValueCondition.getParameterType();
Так что вы думаете о том, что не работает, когда мы просто пишем лямбда-выражение?
А также я создал проблему на github OpenJDK
, если они говорят, что TypeReference Hack не работает с анонимным классом и лямбда-выражением, я приму ответ