2011-12-04 22 views
3

をパラメータとして、私は実装が唯一の、例えば特定のタイプを受け入れるべき今インタフェースの実装方法は

public void myMethod(List<?>); 

のように、一般的なオブジェクトのいずれかのタイプを受け入れるインタフェースのメソッドを持っているしたいと思います。実装1:

は実装2:

public void myMethod(List<String>); 

しかしこれはpublic void myMethod(List<Integer>);として動作しませんpublic void myMethod(List<?>);

どのように私はこれを達成できる有効なimplementaionではないでしょうか?

+0

正確に。 'public void MyMethod(List )'のメソッドを実装していない場合は、インターフェースを実装していません(http://en.wikipedia.org/wiki/Liskov_substitution_principleを参照)。あなたは何をしようとしているのですか? –

+0

オブジェクトパラメータを使用しないので、myMethod(List <?extends Object>)を使用しないことを意味しますか?物事を一般的なものにしたいのであれば、あなたはいつも何らかの鋳造をしなければならなくなるでしょう...私はあなたのことを見逃しているかもしれません。 – Miquel

答えて

2

明らかに何かが分かりにくい(私の好みではあまりにも多くのことが起こっている)ことが分かっていないのであれば、インターフェースそのものを一般化してみてはいかがですか?

そのように実装することができ
public interface MyInterface<T> { 
    public void myMethod(List<T> list); 
} 

public class MyClass<T> implements MyInterface<T> { 

    @Override 
    public void myMethod(List<T> list) { 
     // TODO complete this!  
    } 

} 

ので、同じように使用:

public class Foo { 
    public static void main(String[] args) { 
     MyClass<String> myString = new MyClass<String>(); 
     MyClass<Integer> myInt = new MyClass<Integer>(); 
    } 
} 
+0

試してみる必要がありますが、それは問題に重点を置いていますが、うまくいくと思います。私はフレームワークを作成しており、String、Integer、UUIDまたはカスタムタイプのどれかになるGeneric Identityフィールドが必要です。それを使用する開発者が必要とするものに応じて。 –

0

あなたがタイプしたいことがあります。例えばhttp://docs.oracle.com/javase/tutorial/java/generics/gentypes.html

public void myMethod(List<T>);を使用

あなたのインターフェイスには、あなたの具体的なクラスは、あなたが望むタイプでinstatiatedされています。 `

+0

ええ、私はクラスにかなり似ているし、インターフェイスが一般的な間は、さまざまな方法は特定の種類のボックスのみを受け入れる必要があります –

関連する問題