私は何日も可能かどうかを考えようとしていましたが、失敗しましたが、おそらく可能です(可能であるはずだと思います)。
Swing階層と同様のUIコンポーネントがいくつかあるとしましょう+流暢なインターフェースを使用します流暢なインターフェース:
public abstract class Component {
...
public abstract Component setName(String name);
public abstract String getName();
...
}
public abstract class Panel extends Component {
....
}
public abstract class TitledPanel extends Panel {
....
public abstract TitledPanel setTitle(String title);
public abstract String getTitle();
}
ジェネリックを使用してそのようなものを書くことができるようにすることは可能ですか?
new TitledPanel().setName("panel").setTitle("Title);
これらの呼び出しをリンクできるようにするには、setNameはComponentではなくTitledPanelを返す必要があります。
これは単純な例ですが、T型のオブジェクトを取得したら、スーパークラスの流暢なメソッドを呼び出してT型を返すという考え方です。
編集1:メソッドをオーバーライドして共変型を返す部分を除外するのを忘れました:)可能であれば、単純なジェネリックスだけが必要です。