Код ниже компилируется нормально, но выдает исключение во время выполнения. Это ожидаемое поведение и почему?
Код:
public static void main(String[] args) {
A<Integer> a = new A<> ();
System.out.println(a.min()); //prints null as expected
System.out.println(a.max()); //throws exception
}
static class A<T extends Number & Comparable<? super T>> {
Stream<T> s = Stream.empty();
public T min() { return s.min((t1, t2) -> t1.compareTo(t2)).orElse(null); }
public T max() { return s.max(T::compareTo).orElse(null); }
}
Выход:
null
Exception in thread "main" java.lang.BootstrapMethodError: call site initialization exception
at java.lang.invoke.CallSite.makeSite(CallSite.java:341)
at java.lang.invoke.MethodHandleNatives.linkCallSiteImpl(MethodHandleNatives.java:307)
at java.lang.invoke.MethodHandleNatives.linkCallSite(MethodHandleNatives.java:297)
at abc$A.max(abc.java:19)
at abc.main(abc.java:8)
Caused by: java.lang.invoke.LambdaConversionException: Invalid receiver type class java.lang.Number; not a subtype of implementation type interface java.lang.Comparable
at java.lang.invoke.AbstractValidatingLambdaMetafactory.validateMetafactoryArgs(AbstractValidatingLambdaMetafactory.java:233)
at java.lang.invoke.LambdaMetafactory.metafactory(LambdaMetafactory.java:303)
at java.lang.invoke.CallSite.makeSite(CallSite.java:302)
... 4 more
java.lang.IllegalStateException: stream has already been operated upon or closed
с java 1.8.0_60 - person Alexis C.   schedule 03.11.2015LambdaConversionException
... У меня естьIllegalStateException
, если я изменяю аргументmax
на(t1, t2) -> t1.compareTo(t2)
вместоT::compareTo
. - person Tunaki   schedule 03.11.2015LambdaConversionException
с ECJ. Вы уверены, что не используете это? - person Yosef Weiner   schedule 03.11.2015T
только расширитьComparable
(неNumber
) - person Yosef Weiner   schedule 03.11.2015Comparator.naturalOrder()
вместоT::compareTo
, но жаль, что до сих пор есть проблемы с множественными границами… - person Holger   schedule 03.11.2015jdk1.8.0_60
- person Holger   schedule 03.11.2015u45
. - person Holger   schedule 03.11.2015LambdaConversionException
с компилятором Eclipse Luna SR2 (4.4.2), но отлично работает с компилятором JDK 1.8.0_51 (Windows). Вы используете Эклипс? Какая версия. Пахнет жуком. - person clstrfsck   schedule 04.11.2015