[英]Two implementations for an interface with different types - Is this not possible?
我有这样的界面:
interface Transformer {
public String transform( List<Object> elements );
}
实现:
class XMLTransformer implements Transformer{
public String transform( List<MyXMLElements> elements );
}
class TXTTransformer implements Transformer {
public String transform( List<MyTXTElements> elements );
}
但请注意,MyXMLElements和MyTXTElements没有共同的父级。 那些是完全不同的对象。
在界面中也尝试过这个:
public String transform( List<? extends Object> elements );
public String transform( List<?> elements );
public String transform( List<T extends Object> elements );
public String transform( List<T> elements );
有没有办法实现这个目标?
这应该可以使用泛型 - 为您的接口声明泛型类型参数:
interface Transformer<T> {
public String transform( List<T> elements );
}
然后,您的实现类只需使用实际的类名来代替接口上的泛型类型参数:
class XMLTransformer implements Transformer<MyXmlElements>{
public String transform( List<MyXMLElements> elements ) {}
}
class TXTTransformer implements Transformer<MyTXTElements> {
public String transform( List<MyTXTElements> elements ) {}
}
您可以使用通用接口:
interface Transformer<T> {
public String transform( List<T> elements );
}
并使您的类实现该泛型类型的不同实例:
class XMLTransformer implements Transformer<MyXMLElements> {
public String transform( List<MyXMLElements> elements ) {
}
}
class TXTTransformer implements Transformer<MyTXTElements> {
public String transform( List<MyTXTElements> elements ) {
}
}
这里, Transformer<MyXMLElements>
是泛型类型Transformer<T>
的实例。 Simlarly Transformer<MyTXTElements>
是同一泛型类型的另一个实例。
这是因为泛型类型的擦除 。 对于JVM,您在两种情况下都使用List of elements实现接口,这是完全可以接受的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.