Bei der Verwendung von Optional
s und anonymen Klassen ist ein seltsames Problem aufgetreten :
public class Foo {
interface Bar {
}
void doesNotCompile() {
Optional.of(new Bar() {
}).orElse(new Bar() {
});
}
void doesNotCompile2() {
final Bar bar = new Bar() {
};
Optional.of(new Bar() {
}).orElse(bar);
}
void compiles1() {
final Bar bar = new Bar() {
};
Optional.of(bar).orElse(new Bar() {
});
}
}
Die ersten beiden Methoden werden nicht mit dem Fehler kompiliert
java: incompatible types: <anonymous test.Foo.Bar> cannot be converted to <anonymous test.Foo.Bar>
Ich hatte das erwartet, da beide die Schnittstelle implementieren Bar
alle drei Ansätze funktionieren . Ich kann auch nicht herausfinden, warum die dritte Option das Problem behebt. Kann mir das bitte jemand erklären?
Optional.of
behoben istOptional<Bar>
. In allen anderen Fällen ist esOptional<SubAnonymousSubclassOfBar>
. Ich hätte erwartet, dass die anderen beiden auch die entsprechende gemeinsame Obergrenze von ableiten würdenBar
. Benötigt aber anscheinendOptional<SomeSubclassOfBar>(bar).orElse(someOtherSubclassOfBar)
etwas Händchenhalten.