java - 如何在此接口(interface)中覆盖此方法(参见代码)?

标签 java object generics interface

我有一个名为 A 的接口(interface):

public interface A { 
    void X(T t);
}

然后我有两个实现此接口(interface)的子类(B 和 C),但它们每个都将不同的类型传递给 X 让我们说 B 传递类型 foo,C 传递类型 bar:

public class B implements A {
    @Override
    public <T extends foo> void X(T type1)
}

public class C implements A {
    @Override
    public <T extends bar> void X(T type2)
}

我做错了什么,为什么不起作用?编译器一直告诉我“方法不会覆盖其父类(super class)中的方法”。

提前致谢!

最佳答案

即使使用泛型方法,当它们被覆盖时,泛型也必须完全匹配。

可能不符合您要求的一种方法是删除实现类的上限,例如

class B implements A {
    @Override
    <T> void X(T type1) { /* impl */ }
}

但是如果你需要上界,那么在接口(interface)上用类型参数来表示上界。

interface A<U> { 
    <T extends U> void X(T t);
}

然后您可以在实现类中提供上限的类型参数。

class B implements A<Foo> {
    @Override
    public <T extends Foo> void X(T type1) { /* impl */ }
}

class C implements A<Bar> {
    @Override
    public <T extends Bar> void X(T type2) { /* impl */ }
}

但是因为任何你可以在 T 上调用的东西你也可以在 FooBar 上调用,也许这些方法不需要通用。

interface A<T> { 
    void X(T t);
}
class B implements A<Foo> {
    @Override
    public void X(Foo type1) { /* impl */ }
}

class C implements A<Bar> {
    @Override
    public void X(Bar type2) { /* impl */ }
}

关于java - 如何在此接口(interface)中覆盖此方法(参见代码)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55578685/

相关文章:

C++ 类函数如何存储私有(private)成员的值并将其写入数组?

javafx - 如何将节点转换为另一个对象

Java 多级泛型继承

Java - 如何向 HashMap 中的现有键添加新值。 1 个键,多个值

java - 更改您 ping 到 IP 地址的位置

javascript - JavaScript 中的对象操作数组

c# - 如何在 XML 注释中引用泛型类的扩展方法

java - 打印内存地址而不是字符串值

Java - 根据另一个数组的值对一个数组进行排序?

c# - 当通用决策基于数据库值时,如何使用 C# 泛型来实现此实现