gpt4 book ai didi

JAVA 是否可以动态地让一个类扩展另一个类?

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

从昨天起我就一直在寻找一种方法来做到这一点。我拥有数百个来自第三方的 POJO,需要根据业务规则将属性应用于这些 POJO。我避免更改 POJO,因为第三方可能会重新创建它们,从而为以后的文件管理带来一场噩梦。

我试图做的是动态地让一个类扩展另一个类。例如。

POJO:Foo.java

package abc.service;

public class Foo {
private String greeting = "";

public Foo(){
gretting = "Good morning";
}

public String getGreeting(){
return greeting;
}
}
// end file

我的:Bar.java

package abc.service;

public class Bar {
private String claim = "";

public Bar(){
claim = "You're correct";
}

public String getClaim(){
return claim;
}
}
// end file

我的:TestMe.java

尝试在与 POJO 分开的类中让 POJO 扩展我的另一个类。

这超出了JAVA的能力吗?

package abc;

public class TestMe {
Foo f = new Foo();
Class c1 = f.getClass();

Bar b = new Bar();
Class c2 = b.getClass();

Class merged = c2.asSubclass(c1);

// Trying to call the Foo method
System.out.println(merged.getGreeting());
// Trying to call the Bar method
System.out.println(merged.getClaim());
}

此外,JSON 模式是根据提供的 POJO 创建的。但 POJO 仅基于 UPDATE 记录场景。我正在寻找让 POJO 为 CREATE 记录场景扩展另一个类的最佳方法,这就是为什么我希望在需要时动态地让他们的 POJO 扩展我的代码。

  • 需要为 POJO 生成 json 架构以进行更新
  • 需要验证其 json 是否满足 POJO 的 UPDATE 要求
  • 需要将其 json 转换为 POJO 进行更新

另外,

  • 需要为 CREATE 的 POJO 生成 json 模式
  • 需要验证其 json 是否满足 CREATE 的 POJO 要求
  • 需要将其 json 转换为用于 CREATE 的 POJO

使用 Jackson Mixin 和 ObjectMapper,我可以在创建模式时动态地将代码应用到类,但我遇到的问题是当尝试让 POJO 扩展类时 Mixin 无法解决问题。

最佳答案

使用纯 Java:不,这是不可能完成的。

您可以在构建过程中或在运行时更改字节代码。但这很难,而且没有太多文档。

AspectJ 的声明 parent 表达式可能是在构建时执行此操作的最简单方法。

如果您想在运行时执行此操作,请查看 asm、CGLib 或 ByteBuddy 等框架。但是您必须从自定义类加载器或代理内部运行代码。

关于JAVA 是否可以动态地让一个类扩展另一个类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42650245/

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