Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 接口中的泛型类型与实现中的泛型类型_Java_Generics_Interface_Abstract - Fatal编程技术网

Java 接口中的泛型类型与实现中的泛型类型

Java 接口中的泛型类型与实现中的泛型类型,java,generics,interface,abstract,Java,Generics,Interface,Abstract,我在JAVA中有一个非常常见的泛型用例,我无法关注这是如何不可能的 下面的示例显示,不可能在接口中创建泛型类型,以在实现方法中进一步将其作为泛型类型传递 interface MyInterface <T, I, O> { public T method(T arg); } abstract class MyAbstractClass <I , O> implements MyInterface<List<?>, I , O> {

我在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
     }
}
接口MyInterface
{
公共T法(T-arg);
}    

抽象类MyAbstractClass实现MyInterface我不确定这是否真的是您想要做的,但这种方法会起作用:

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
    }
}
接口MyInterface
{
T法(I-arg);
}
抽象类MyAbstractClass实现MyInterface
{
@凌驾
公开摘要列表法(列表参数);
}
MyClass实现扩展了MyAbstractClass
{
@凌驾
公共列表方法(列表参数){
//…实施
}
}

首先,您的界面不使用其他两种类型。第二,将List传递给MyInterface,在我的抽象类中,在方法中分别使用List和List,这是错误的,您应该到处都有相同的类型,O或I等。我意识到编译器对重载参数类型进行了强检查,但对返回的类型没有检查。所以我必须准确地定义传递参数的类型。我只是将我的对象更改为您提出的类似模型。谢谢