Với một API như:Với 'T` và' U` nơi 'T kéo dài U` làm thế nào để trả về một' U`
class Bar { ... }
class Foo extends Bar { ... }
Trong Optional
loại Java, chúng ta có thể nói:
Optional<Foo> fooOption = ...
fooOption.orElse(aFoo) // returns something of type Foo
Nhưng, kể từ Foo
là một Bar
, tôi muốn để có thể nói:
Optional<Foo> fooOption = ...
fooOption.orElse(aBar) // returns something of type Bar
là một tập thể dục, tôi wa nted để thực hiện điều này với loại khác:
public abstract class Option<T> {
// this doesn't compile
public abstract <U super T> U orElse(U other);
}
Làm thế nào tôi sẽ viết lại này để biên dịch, mà còn hỗ trợ khả năng mở rộng các loại khi mong muốn cùng một lúc?
'abstract class Lựa chọn {public abstract U OrElse (U khác);} '? tại sao bạn lại đặt tên cho phương thức 'orElse' - điều này có thể gây nhầm lẫn cho những người mong đợi' Optional.orElse' –
alfasin