Java类继承重写List字段



我面临一个问题,我有一个avro生成的类a和另一个定义如下的B:

class A {
String code;
}
class B {
String someString;
List<A> codes;
}

以及扩展前面描述的两个生成类的自定义类,如以下所示:

class CustomA extends A {
String type;
}
class CustomB extends B {
List<CustomA> codes;
}

如果我删除列表<>但我确实需要它。对于getters/ssetter,我使用lombok@Data注释。

有人有解决方案吗?

我想同样的问题也会出现在地图<>上,所以我也需要一个解决方案。

谢谢你的回答。

[编辑]因此,我将在下面用这两张截图给出更具体的例子。

这里是我的类声明。正如我之前所说,类A和B(这里是User和ToDoItem(是由avro模式生成的类,所以我不能在其中修改/写入。这里是我的编译错误。

您可以使用泛型。像

class B<T extends A> {
List<T> codes;
}
class CustomB extends B<CustomA> {
...
}
正如@kiv_apple所指出的,实现这一点的唯一方法是泛型。使用生成的代码,CustomB的实例可能始终包含对codes列表中A实例的引用。如果不触及B的类定义,就无法对此进行限制。

由于这在您的情况下是不可能的,您必须找到一个变通方法。一种方法是定义一个自定义的、命名不同的getter(不带Lombok(,它只返回codes中作为CustomB实例的那些元素。

最新更新