J'ai répliqué une exception lancée en essayant d'utiliser type intersection de type variable pour capturer lambdas; Plus précisément, de reproduire, je tentais d'attraper un lambda comme F
où <A, F extends Consumer<A> & Serializable>
:ClassCastException lors de la capture d'un lambda sérialisable avec des paramètres de type intersection
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
Voici un exemple de l'exception levée:
java.lang.ClassCastException: [insert lambda name] cannot be cast to java.util.function.Consumer
Je suis en mesure d'utiliser Consumers.serializable
avec ou locale variables d'instance; cette exception est levée lorsque vous essayez d'initialiser des variables statiques.
Est-ce correct? J'utilise le dernier Eclipse Oxygen, JDK u112.
Le compilateur eclipse est différent du compilateur JDK et il y a pas mal de différences dans leur comportement. Peut-être essayer à l'aide du compilateur JDK? 'javac' ou maven ou tout ce que vous utilisez qui utilise le compilateur JDK. –