2011-12-04 102 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

將不得不嘗試,但我想這將工作,雖然它會過於強調這個問題。我正在創建一個框架,並需要一個通用標識字段,可以是從字符串,整數,到UUID或自定義類型的任何內容。取決於開發人員使用它的要求。 –