2015-04-27 76 views
0

好的,这个标题有点令人困惑。但是这是我想要完成的:如何返回泛型类型,而另一个泛型类型为参数,都需要实现interace?

我想返回一个包含类型为C的元素的列表。我想让该方法接收一个类型为R的变量。而C必须是一个实现接口的类,即C_interface,R必须是实现另一个接口的类,即R_interface。

在我的世界里这种方法头应该工作:

public <C implements C_interface, R implements R_interface> List<C> method_name(R r) 

但事实并非如此。我得到在Eclipse以下错误:

Multiple markers at this line 
    - Syntax error on token "implements", , 
    expected 
    - R cannot be resolved to a type 
    - Syntax error on token "implements", , 
    expected 
    - C cannot be resolved to a type 

如果我删除工具接口部分,像这样:

public <C, R> List<C> method_name(R r) 

,一切工作正常。我想我可以检查方法内的类型。但如果这样做的话,第一种方式是可能的,那会好很多。

+6

用“扩展”替换“实现”。 [参考](https://docs.oracle.com/javase/tutorial/java/generics/bounded.html) – Makoto

+0

https://docs.oracle.com/javase/tutorial/java/generics/boundedTypeParams.html – Radiodef

+0

possible [T扩展垃圾是什么意思在Java中的泛型类?](http://stackoverflow.com/questions/13632916/what-does-t-extends-junk-mean-in-a-generic- class-in-java) – CKing

回答

1

您应该使用extends而不是器具。这工作:

public class DoubleParamGeneric { 

    public <C extends CInterface, R extends RInterface> List<C> m(R r) { 

     List<C> result = null; 

     // Process here 

     return result; 

    } 
} 

public interface CInterface { 

} 

public interface RInterface { 

} 
相关问题