型ファミリがあるとします。基本型で一連のメソッドを定義しました。
interface Foo<T> {
Foo<T> a();
Foo<T> b();
...
}
そしてBar
伸びるFoo
interface Bar<T> extends Foo<T> {
Bar<T> a();
Bar<T> b();
...
}
そして、Zee
伸ばしますBar
interface Zee<T> extends Bar<T> {
Zee<T> a();
Zee<T> b();
...
}
この型ファミリをさまざまなデコレータで実装すると、次のようなものを常に書いていることがわかりました
class XBar<T> extends XFoo<T> implements Bar<T> {
Bar<T> a() {
return (Bar<T>)super.a();
}
Bar<T> b() {
return (Bar<T>)super.b();
}
...
}
本当に面倒です。Java API 設計におけるこの通常のケースなのか、何か間違ったことをしたのか、1 行のコードで定数の型キャストを回避するスマートな方法があるのだろうか?
更新、あなたのコメントと応答に答えるために、はい、メソッドチェーンは私がここで達成したいことの1つです. ところでBaseStream
、Java8 の型宣言は、この問題に対処する良い例のようです。私はそのアプローチを使用しようとしています。ここで私の進捗状況を更新します。
更新 2、複数の継承レベルがある場合、このBaseStream
アプローチは機能しません。複数レベルの階層で Java が継承した Fluent メソッドの戻り値の型を参照してください。