gpt4 book ai didi

java - 使用类对象作为类型

转载 作者:行者123 更新时间:2023-11-30 02:04:38 26 4
gpt4 key购买 nike

我的类层次结构如下:

  • PersistedObject(无法修改或扩展此对象)
    • 酒吧
    • 巴兹

其中 FooBarBaz 是扩展 PersistedObject 的类。然而,有一种代码味道,FooBarBaz 各自都有一个对象复制的实现,每个类中的对象复制实现基本相同,但没有类型文字:

protected PersistedObject copy() {
Foo copy = toBuilder().build();
copy.copyPersistedObject(this);
return copy;
}

我通过父类(super class)获取copyPersistedObject,它实现了与数据库持久性相关的逻辑。

所以我想从 FooBarBaz 中删除所有这些样板文件。理想情况下我会达到这一点:

  • PersistedObject(无法修改或扩展它)
    • 自定义持久对象
      • 酒吧
      • 巴兹

也就是说,我想制作一个 copy() 的单一实现,并使其成为 FooBarBaz 全部从我的 CustomPersistedObject 类扩展。

问题是,copy() 方法的第一行要求我使用具体类型来缓存自 Foo 以来对象预复制的状态code>、BarBaz 各自将自己不同的字段添加到 PersistedObject 中,然后执行 copyPersistedObject() 进行处理与数据库的东西,最后返回我在 copyPersistedObject 调用后捕获的状态。

所以,我有点想通过反射来完成这件事,有什么方法可以在运行时获取 java 对象的 .class 然后使用它作为类型本身来实例化?

我想达到这样的目的:

protected PersistedObject copy() {
Class<?> clazz = this.getClass();
[clazz.asType] copy = toBuilder().build();
copy.copyPersistedObject(this);
return copy;
}

最佳答案

一旦您获得Class对象,您可以反射(reflection)地找到构造函数,选择适当的构造函数,然后调用 Constructor#newInstance(...)方法。

这一切都清楚地记录在 Javadoc 中。

关于java - 使用类对象作为类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51717103/

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