我在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”出现了?
答案 0 :(得分:1)
我认为你误解了十字路口类型。
您拥有的定义意味着:T是字符串and
List<String>
,而不是字符串OR
List<String>
,这是不可能的,因为String不是{{1因List<String>
为String
而无法扩展List<String>
和String
。
如果两个接口之间有交集,那么这样的定义是有意义的,因为Java支持多接口继承,或者一个实现和多个接口,因为类可以扩展另一个实现并实现多个接口。
由于final
能够包含零个或多个字符串,因此您可以让方法返回List<String>
。