Biorąc API jak:Biorąc `T` i` `T U` gdzie rozciąga U` jak zwrócić` U`
class Bar { ... }
class Foo extends Bar { ... }
W Java Optional
typu, możemy powiedzieć:
Optional<Foo> fooOption = ...
fooOption.orElse(aFoo) // returns something of type Foo
Ale ponieważ Foo
jest Bar
, chciałbym móc powiedzieć:
Optional<Foo> fooOption = ...
fooOption.orElse(aBar) // returns something of type Bar
Jako ćwiczenie, ja wa nted do osiągnięcia tego celu z innego typu:
public abstract class Option<T> {
// this doesn't compile
public abstract <U super T> U orElse(U other);
}
Jak bym przepisać to skompilować, ale także wspierać zdolność do poszerzenia typ gdy jest to pożądane w tym samym czasie?
'klasa abstrakcyjna Opcja {public abstract U OrElse (U inne);}'? dlaczego nazwałbyś metodę 'orElse' - może to zmylić ludzi oczekujących' Opcjonalnie.orElse' –
alfasin