2011-12-04 35 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或自定义类型的任何内容。取决于开发人员使用它的要求。 –