2011-01-29 8 views
2

私はpublic class MyList<T>のようなジェネリックを使用しています。 Tで表されるクラスが特定の静的メソッドを実装するようにする方法はありますか?Java generics - 静的メソッドが実装されていることを確認する

+0

@ Kirk Woll:私は、物事をサブクラス化したり、静的でなければならない非静的なメソッドを宣言する必要がないようにしようとしています。同時に、ジェネリックスを使用してコードを可能な限り簡潔に保ちたい。 – ryyst

+0

@user、私の主張は、もしあなたが*そのような制約を加えることができたとしても、最初は汎用的な 'MyList 'の中でその能力を使うことができないからです。これらの静的メソッドを汎用リストから呼び出すことはできません。静的メンバーでは、汎用パラメータを使用して何も行うことはできません。 –

+0

IMHO、あなたのメソッドは静的であってはなりません。それぞれのインスタンスに対して同じ値を返すメソッドが必要であっても、 'this'は使用しない場合でも、静的であってはなりません(理解するのに一度はかかりました)。静的メソッドにはほんのわずかの用途しかありません。 – maaartinus

答えて

2

いいえ、ジェネリックスがなくても、クラスが静的メソッドを実装する方法は決してありません。

しかし、一般的な静的メソッドを作成することはできます。

public static <T> List<T> makeSingletonList(T item) { 
     ArrayList<T> result = new ArrayList<T>(); 
     result.add(item); 
     return result; 
} 
+0

大丈夫、meh ...... – ryyst

+1

そしてあなたのクラスが拡張する必要がある抽象クラスに入れてください。 – BalusC

2

残念ながらそうではありません。代替案として

、あなたのクラスの静的メソッドは、ビルダーのような関連クラスのいくつかの並べ替えに属しているかどうかを検討してください。

class Person { 
    public static Person createFromDatastore(Datastore datastore) { ... } 
} 

非として別々のクラスに静的を移動する方が良いかもしれ静的メソッド:

class PersonBuilder implements Builder<Person> { 
    public Person createFromDatastore(Datastore datastore) { ... } 
} 

これはあなたのジェネリッククラスのクライアントを指示することができることを意味し、今それを提供するために必要なことができます。

public class MyList<B extends Builder<T>, T> ... 
+0

+1:私はそれが不幸だとは思わないが、 – Jeremy

+0

@ジェレミー・ヘラー - 笑 - 編集に感謝する。 –

関連する問題