如何在将另一个泛型类型作为参数的情况下返回泛​​型类型,这两者都是实现interace所必需的?

时间:2015-04-27 15:15:24

标签: java generics interface generic-programming generic-method

好的,标题有点令人困惑。但这就是我想要实现的目标:

我想返回一个包含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

如果我删除implements接口部分,如下所示:

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

一切正常。我想我可以检查一下方法中的类型。但如果这样做是第一种方式,那就更好了。

1 个答案:

答案 0 :(得分: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 {

}