【问题标题】:Java class inheritance override List fieldJava 类继承覆盖 List 字段
【发布时间】:2019-03-31 23:49:34
【问题描述】:

我遇到了一个问题,我有一个 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;
}

如果我删除 List 它会起作用,但我真的需要它。 对于 getter/setter,我使用 lombok @Data 注释。

有人有解决办法吗?

我想地图也会遇到同样的问题,所以我也需要一个解决方案。

感谢您的回答。

[编辑] 所以我将在下面用这两个截图给出更具体的例子。

Here my classes declarations。正如我之前所说,A 类和 B 类(这里是 User 和 ToDoItem)是由 avro 模式生成的类,所以我不能修改/写入它。 Here the compilation errors I have.

【问题讨论】:

  • "如果我删除列表,它会起作用" 如果你离开它,究竟什么不起作用?

标签: java list inheritance avro lombok


【解决方案1】:

实现这项工作的唯一方法是泛型,如@kiv_apple pointed out。 使用您生成的代码,CustomB 的实例可能始终包含对codes 列表中A 实例的引用。如果不触及 B 的类定义,就无法限制它。

由于在您的情况下这是不可能的,您必须找到一种解决方法。一种方法是定义一个自定义的、不同名称的 getter(没有 Lombok),它只返回 codes 的那些元素,这些元素是 CustomB 的实例。

【讨论】:

    【解决方案2】:

    您可以使用泛型。喜欢

    class B<T extends A> {
       List<T> codes;
    }
    
    class CustomB extends B<CustomA> {
        ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多