使用Java Generics的多重绑定类型定义接口

时间:2016-05-23 19:22:15

标签: java generics

我在Advanced Java Generics的初学者知识水平上相对规模化。我想定义一个像这样的接口

public interface Transformer {
 <T extends String & List<String>> T transform(String input) throws            
  IOException;
}

我的实施类A如下所示:

public Class A implements Transformer{
   ....
   ....

  @Override
  public <T extends String & List<String>> T transform(String input)     throws IOException {
     String response = "a";
    return response; // compilation error "Incompatible Types: Required T but found java.lang.String"
   }

}

我想要的:实现类应该能够传递String输入,返回类型可以是String或List。实现类完全可以自由选择任何一种返回类型。

问题: 1.为什么编译错误“不兼容的类型:必需的T但是找到java.lang.String”出现了?

1 个答案:

答案 0 :(得分:1)

我认为你误解了十字路口类型。

您拥有的定义意味着:T是字符串and List<String>,而不是字符串OR List<String>,这是不可能的,因为String不是{{1因List<String>String而无法扩展List<String>String

如果两个接口之间有交集,那么这样的定义是有意义的,因为Java支持多接口继承,或者一个实现和多个接口,因为类可以扩展另一个实现并实现多个接口。

由于final能够包含零个或多个字符串,因此您可以让方法返回List<String>