Java 不同类型接口的两种实现-这不可能吗?

Java 不同类型接口的两种实现-这不可能吗?,java,generics,methods,types,interface,Java,Generics,Methods,Types,Interface,我有这样一个界面: interface Transformer { public String transform( List<Object> elements ); } 接口转换器{ 公共字符串转换(列表元素); } 实施: class XMLTransformer implements Transformer{ public String transform( List<MyXMLElements> elements ); }

我有这样一个界面:

 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 );
 }
类XMLTransformer实现转换器{ 公共字符串转换(列表元素); } 类TXTTransformer实现转换器{ 公共字符串转换(列表元素); } 但请注意,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 );
}
公共字符串转换(列表元素);
公共字符串转换(列表元素);
公共字符串转换(列表元素);

有没有办法做到这一点?

这是因为。对于JVM,您在这两种情况下都使用元素列表来实现接口,这是完全可以接受的。

对于泛型,这应该是可能的-为您的接口声明泛型类型参数:

    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 );
}
接口转换器{
公共字符串转换(列表元素);
}
然后,您的实现类只需使用实际的类名来代替接口上的泛型类型参数:

    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 );
}
类XMLTransformer实现转换器{ 公共字符串转换(列表元素){} } 类TXTTransformer实现转换器{ 公共字符串转换(列表元素){} }
您可以使用通用接口:

    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 ) {
     }
}
类XMLTransformer实现转换器{ 公共字符串转换(列表元素){ } } 类TXTTransformer实现转换器{ 公共字符串转换(列表元素){ } }
这里,
Transformer
是泛型类型
Transformer
的一个实例。Simlarly
Transformer
是相同泛型类型的另一个实例化

当我调用XML或TXT类型的方法时,它会自动识别要使用哪个类/方法?@KevinRave。是的。确切地对于带有
XMLTransformer
实例的
Transformer
引用,它将调用
XMLTransformer
中的方法。尝试实现它。