Reputation: 14466
I have an interface like this:
interface Transformer {
public String transform( List<Object> elements );
}
implementations:
class XMLTransformer implements Transformer{
public String transform( List<MyXMLElements> elements );
}
class TXTTransformer implements Transformer {
public String transform( List<MyTXTElements> elements );
}
But note that MyXMLElements and MyTXTElements do NOT have a common parent. Those are completely different objects.
Tried this as well in the interface:
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 );
Is there a way to achieve this?
Upvotes: 1
Views: 712
Reputation: 213411
You can use generic interface:
interface Transformer<T> {
public String transform( List<T> elements );
}
And make your class implement different instantiations of that generic type:
class XMLTransformer implements Transformer<MyXMLElements> {
public String transform( List<MyXMLElements> elements ) {
}
}
class TXTTransformer implements Transformer<MyTXTElements> {
public String transform( List<MyTXTElements> elements ) {
}
}
Here, Transformer<MyXMLElements>
is an instantiation of the generic type Transformer<T>
. Simlarly Transformer<MyTXTElements>
is another instantiation of the same generic type.
Upvotes: 1
Reputation: 178363
This should be possible with generics - declare a generic type parameter for your interface:
interface Transformer<T> {
public String transform( List<T> elements );
}
Then your implementing classes simply have to use the actual class name in place of the generic type parameter on the interface:
class XMLTransformer implements Transformer<MyXmlElements>{
public String transform( List<MyXMLElements> elements ) {}
}
class TXTTransformer implements Transformer<MyTXTElements> {
public String transform( List<MyTXTElements> elements ) {}
}
Upvotes: 2
Reputation: 68725
This is because of the generics type erasure. For JVM you are implemting the interfaces with List of elements in both the cases, which is totally acceptable.
Upvotes: 0