2017-03-20 158 views
0

我有一个非常常见的用例在JAVA泛型泛滥,我无法专注如何这是不可能的。通用类型从实现中的泛型类型的接口

以下示例显示无法在接口中创建通用类型,以便在实现方法中将其作为泛型类型进一步传递。

interface MyInterface <T, I, O> 
{ 
    public T method(T arg); 
}  

abstract class MyAbstractClass <I , O> implements MyInterface<List<?>, I , O> 
{ 
    // This cause a syntax-failure! What is wrong with this? 
    // And how can I manage my Generics like this? 
    @override 
    public abstract List<O> method(List<I> arg); 
} 

class MyImplementation extends MyAbstractClass <String , Integer> 
{ 
    List<String> method(List<Integer> arg) 
    { 
     // ... implementation 
    } 
} 
+0

首先,你的界面不使用其他2种类型。其次,您将List 传递给MyInterface,并在我的抽象类中使用列表和List 分别在该方法中,这是错误的,您应该具有相同类型,无论是O还是I等。 – Justas

回答

0

我不知道这是你真正想做的事,但这种方式会工作:

interface MyInterface <T, I, O> 
{ 
    T method(I arg); 
} 

abstract class MyAbstractClass <O, I> implements MyInterface<List<O>, List<I> , O> 
{ 
    @Override 
    public abstract List<O> method(List<I> arg); 
} 

class MyImplementation extends MyAbstractClass <String , Integer> 
{ 
    @Override 
    public List<String> method(List<Integer> arg) { 
     // ... implementation 
    } 
} 
+0

我意识到编译器会执行强调检查重载参数类型,但不返回类型。所以我必须准确定义传递参数的类型。 我只是将我的对象更改为从您提出的类似模型。 谢谢。 –