gpt4 book ai didi

java如何在类之间共享字段和方法

转载 作者:行者123 更新时间:2023-12-02 09:55:20 25 4
gpt4 key购买 nike

我有一些 BaseX pojo 类:

public class Base1 {
private String base1Field1;
private String base1Field2;
// getter & setter
}
public class Base2 {
private String base2Field1;
private String base2Field2;
// getter & setter
}

还有一些 DomainVo pojo 类,它有一些来自 BaseX 类的字段和方法:

//from base1
public class Domain1Vo {
private String domain1Field1;
private String base1Field1;
private String base1Field2;
// getter & setter
}
//from base1 & base 2
public class Domain2Vo {
private String domain2Field1;
private String base1Field1;
private String base1Field2;
private String base2Field1;
private String base2Field2;
// getter & setter
}

我不想将这些字段从 BaseX 类复制粘贴到我的域对象,但我不能使用 extends Base1, Base2 因为 java 不允许它。

我实际上并没有在代码中使用BaseX,我定义它们只是想要一个地方来维护这些字段。

更新:我无法更改我的域对象结构,因为它以 json 形式来自/到其他服务。我还需要用它来生成一个 swagger 文档(我使用 springfox)。这就是为什么我需要字段和方法。

========我做了一些研究

我找到了一个名为lombok的库,它有一个功能名称@Delegate https://projectlombok.org/features/experimental/Delegate

//from base1
public class Domain1Vo {
private String domain1Field1;
@Delegate
private Base1 base1;
// getter & setter
}

它可以从BaseX类生成方法,但不能从字段生成。

最佳答案

构图就是你想要的。继承被严重过度使用(还有 getter,尤其是 setter)。

基类成为组件。 (使用更好的名称!即使是“base”也不是一个在类名中使用的有用词。)

public final class Component1 {
private String component1Field1;
private String component1Field2;
// domain methods
}
public final class Component2 {
private String component2Field1;
private String component2Field2;
}

public final class Domain1Vo {
private String domain1Field1;
private final Component1 component1;
public Domain1Vo(
Component1 component1
) {
// Or construct.
this.component1 =
Objects.requireNonNull(component1);
}
// domain methods
}
//from base1 & base 2
public final class Domain2Vo {
private String domain2Field1;
private final Component1 component1;
private final Component2 component2;
public Domain2Vo(
Component1 component1,
Component2 component2,
) {
// Or construct.
this.component1 =
Objects.requireNonNull(component1);
this.component2 =
Objects.requireNonNull(component2);
}
// domain methods
}

关于java如何在类之间共享字段和方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56041893/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com