java - java接口(interface)中的泛型

标签 java generics interface

假设我有这个接口(interface)(没有参数化)

public interface MyInterface
{
     MyInterface copy();
}

我如何确保 copy 的任何实现都将返回实际的子类型(而不是 MyInterface)。

例如,

public Impl implements MyInterface
{
    @Override
    public Impl copy() <<<<< The returns type of this needs to be 'Impl'
    {
        return new Impl();
    }
}

但我无法阻止任何实现来做到这一点:

public Foo implements MyInterface
{
    @Override
    public MyInterface copy() <<<<< The returns type of this needs to be 'Foo'
    {
        return new Impl();
    }
}

最佳答案

您可以指定一个通用类型,它是接口(interface)的子类:

interface MyInterface<T extends MyInterface<T>> {
    T copy();
}


class Foo implements MyInterface<Foo> {
    public Foo copy() {
        return null;
    }
}

关于java - java接口(interface)中的泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24069246/

相关文章:

java - 使用 Collections.min 中的值进行索引时出现 IndexOutOfBoundsException

java - 实现通用顶点和边类

generics - Swift 编译器在 where 子句上崩溃

c# - 如何通过反射忽略父接口(interface)上的事件来获取类型的事件

interface - 使用协议(protocol) 'static' 在 Clojure 中描述调度是否准确?

java - 如何使用索引调试每个循环?

java - 为什么 Java 中的 Number 类不是接口(interface)而不是抽象类?

java - 使用 TimerTask 的黑莓 IllegalStateException 错误

java - 采用对象及其任何父类(super class)的方法

java - "Passing arguments"通过 ThreadLocal 好吗?