私は現在、非常に、次の例のように、特定のコレクションの実装が含まれているクラスを持っています類似のgetItemsを得る()メソッド:ジェネリックメソッドは
public abstract class AbstractBag<S extends Collection<?>> {
S items;
public <T> S<T> getItems(){ // <- does not compile
return (S<T>) items;
}
}
最終目的は、以下のように、他のコンテナと同じオリジナルバッグ、またはバッグを得ることである:
public class SetBag extends AbstractBag<Set<?>> {}
public class ListBag extends AbstractBag<List<?>> {}
それは可能ですか?おかげさまで
編集:私は(私が思う)、このコードが必要な理由の詳細を提供します。どのタイプの属性をサポートする必要があるクラスがあります。これらの属性は、その特定のタイプの値の集合である(例えば、文字列のセット、整数のセット、またはWhateverClassのセット)。私は、このデータを特定のキーに関連付けて格納するマップを持っています。これで、キーを呼び出して戻りオブジェクトを正しくキャストすることでデータを取得することができます。便宜上、これは上記の一般的な方法で行います。
は今、私はコレクション型が異なる第二のクラスを持っている必要があります。コードの繰り返し(ここにあるものよりもはるかに多くのコード)を避けるために、私は(AbstractBagのような)ジェネリック型としてコレクションを持って抽象クラスを作成したい、とリストでインスタンス1のために(別のコンテナを持つ2つのクラスを取得し、 SetがSetBagとListBagの場合と同様)。
は、なぜあなたは型付きのメソッドをしたいですか?通常、コンテナ内の要素タイプはパラメータ化されます。 – Bohemian
これは実際のコードを単純化したものです。なぜ私はこれが必要なのかをより明確にするために質問を広げます。 –