实现抽象泛型方法

Implementing an abstract generic method

我在抽象中有一个抽象泛型方法class:

/**
 * @param <Value>
 */
public abstract class TestAbstract<Value> {

    public abstract <Value> void test(Value value);

}    

现在我从这个 class 扩展并实现抽象泛型方法 - 这是我的尝试,但这显然是错误的。

public class Impl extends TestAbstract<Integer> {

    @Override
    public <Integer> void test(Integer value) {

        // value is instanceOf as java.lang.Object and not java.lang.Integer !

    }

}

test()value 被视为 Object 而不是 Integer...

如何覆盖此方法,以便我被迫使用 'integer'-Class?

谢谢!

test in Impl 不是通用方法。它应该只适用于 class Integer。因此你只需要改变

public <Integer> void test(Integer value)

public void test(Integer value)

将摘要改为:

public abstract class SuperClass<T> {
    public abstract void test(T value);
}

子类为:

public class SubClass extends SuperClass<Integer> {
    public void test(Integer value) {
    }
}

现在可以使用了,因为不再有参数隐藏问题。

您正在用具体类型替换类型参数。您可能打算做这样的事情:

public abstract class TestAbstract<V> {
    public abstract void test(V value);
}    

(请注意,按照惯例,类型参数应尽可能为单个大写字母)

现在,当您创建此 class 的具体实现时,您可以用具体类型替换此类型参数:

public class Impl extends TestAbstract<Integer> {

    @Override
    public void test(Integer value) {
        // Here, "value" is an Integer
    }
}

在这种情况下,您不需要方法本身的类型参数,因为它是在周围上下文中定义的(即在 class 中)。