Java泛型方法继承

标签 java generics inheritance

在抽象类中我有方法:

abstract void method(Holder<?> holder);

在实现类中(会有多个像这样的类,每个类都有自己的类型 - SomeClass、SomeClass2,..):

@Override
void method(Holder<SomeClass> aHolder) {...}

这不起作用,那么我错过了什么?

有编译器错误: “方法不会覆盖其父类(super class)中的方法”

最佳答案

重点是 void method(Holder<?> holder) 的实现需要能够接受以下任何一个:Holder<SomeClass> , Holder<SomeClass2> , Holder<Void>等等

如果您尝试将该方法声明为 void method(Holder<SomeClass> holder)在子类中,这意味着您可以调用持有者上的提供程序方法(例如 SomeClass value = holder.get() ),但如果参数实际上是 Holder<Void> 类型,则这会失败并出现类转换异常。 ,例如。

因此,类型系统禁止这样做。

您需要在类级别有一个类型变量:

abstract class BaseClass<T> {
  abstract void method(Holder<T> aHolder);
}

然后你可以创建具体的类:

class SomeClassBaseClass extends BaseClass<SomeClass> {
  @Override void method(Holder<SomeClass> aHolder) {}
}

关于Java泛型方法继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36860197/

相关文章:

c++ - 体系结构 x86_64 的 undefined symbol (C++ 继承问题)

java - 为什么Scala可以序列化Function但不能序列化PartialFunction?

java - 在 Mockito 中动态改变模拟的行为

java - 为什么我不能使用带有通配符的多个类型参数?

C# 强制转换为通用接口(interface)中的对象

java - 使用派生类实例化基类?

java - 使用葫芦测试为android调用后门函数的问题

java - Java中自定义类型的序列化

.net - 带有 Enum 的通用 T 并将 T 转换为 Enum

perl - 将SUPER引用到对象的父类(super class)