ラムダをキャプチャするために型変数型の交差を使用しようとしたときにスローされた例外をレプリケートしました。私は、ローカルまたはでConsumers.serializable
を使用することができるよ交差型パラメータでシリアライズ可能なラムダをキャプチャするときのClassCastException
java.lang.ClassCastException: [insert lambda name] cannot be cast to java.util.function.Consumer
:
public class Consumers {
public static <A, F extends Consumer<A> & Serializable>
Consumer<A> serializable(F action) {
return action;
}
public static <A> Consumer<A> vary(Consumer<? super A> action) {...}
private static final Consumer<Object> DOES_NOTHING =
serializable(a -> {});
public static <A> Consumer<A> doesNothing() {
return vary(DOES_NOTHING);
}
...
}
Consumer<String> action = Consumers.doesNothing(); // throws class cast exception
次がスローされた例外の例です。具体的には、私はF
としてラムダ<A, F extends Consumer<A> & Serializable>
をキャッチしようとし、複製しますインスタンス変数;この例外は、静的変数を初期化しようとしたときにスローされます。
この動作は正しいですか?私は最新のEclipse Oxygen、JDK u112を使用しています。
eclipseコンパイラはJDKとは異なり、動作方法にはかなりの違いがあります。おそらく、JDKのコンパイラを使ってみてください。 'javac'かmavenか、JDKのコンパイラを使用するものを使用します。 –