【问题标题】:How to set default parent property from child?如何从孩子设置默认父属性?
【发布时间】:2021-05-18 12:22:29
【问题描述】:

假设我有两个继承自 Parent 类的名为 Child1 和 Child2 的类。如下所示,所有类都标有 @NoArgsConstructor @AllArgsConstructor @superBuilder 注释。

@NoArgsConstructor
@AllArgsConstructor
@superBuilder
class Parent{   
    Integer id;   
    @Setter(AccessLevel.NONE)
    String type;   
}


@NoArgsConstructor
@AllArgsConstructor
@superBuilder
class Child1 extends Parent{   
    // type = child1
} 

@NoArgsConstructor
@AllArgsConstructor
@superBuilder
class Child2 extends Parent{   
    // type = child2
}

如何在子类中设置默认定义在parent中的type字段?

【问题讨论】:

  • type 是否已初始化为 Parent 中的某个内容?否则它不会编译。
  • 我认为你需要像final String type = "some value";一样在Parent中初始化
  • 你说得对,我只是把 final 放在强调这个字段的值应该只在子 @Sweeper 初始化时分配
  • @Hamed 那是...不是final 的意思。 “这个字段的值应该只在子初始化时分配”不是你可以在 Java 中强制执行的。
  • 是的,我知道。我不希望此字段更改运行时。

标签: java lombok


【解决方案1】:

您好,请查看示例

@NoArgsConstructor
@AllArgsConstructor
@superBuilder
@MappedSuperclas
abstract  class Parent{   
    Integer id;   
    @Setter(AccessLevel.NONE)
    String type;   
}


 @NoArgsConstructor
 @AllArgsConstructor
 @superBuilder
 @AttributeOverride(name="type", 
column=@Column(name="child1_column_type_name", columnDefinition="String default your_default_value", insertable=false))
 class Child1 extends Parent{   
     // type = child1
 } 

 @NoArgsConstructor
 @AllArgsConstructor
 @superBuilder
@AttributeOverride(name="type", 
column=@Column(name="child2_column_type_name", 
 columnDefinition="String  default your_default_value", insertable=false))
 class Child2 extends Parent{   
     // type = child2
 }

【讨论】:

  • 如何设置值?
  • 没有@AttributeOverride 有除列名以外的其他参数
  • 我找不到任何参数来设置值,请将其发布在答案中,以便我可以检查解决方案。
  • 您更改了列名。它的价值如何?我正在寻找子类中的设置值。
  • 默认值?
猜你喜欢
  • 2011-03-10
  • 1970-01-01
  • 2011-09-23
  • 2013-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-08
  • 1970-01-01
相关资源
最近更新 更多