我想编写一个函数,给定一个任意 java bean 作为参数,返回一个对象,该对象是该 bean 的副本,但属于该 bean 类型的包含附加属性的匿名子类。让我用一个到目前为止的例子来说明:
Foo.java:
import lombok.Data;
import lombol.AllArgsConstructor;
@Data
@AllArgsConstructor
public class Foo {
private String bar;
private String baz;
}
Garply.java:
public class Garply {
Foo fooWithQux(Foo foo, String quxVal) {
return new Foo(foo.bar, foo.baz) {
private String qux;
public String getQux() {
return quxVal;
}
};
}
}
这似乎很愚蠢,因为我永远无法真正调用getQux()
,但我使用的工具使用反射来成功找到qux
属性并使用它做我想做的事。
我的问题是我不想fooWithQux()
为我希望能够将qux
属性添加到的每种类型都有单独的函数。理想情况下,我会有类似的东西beanWithQux()
接受任意类型的对象。我想我可以通过以下方式完成这项工作:
public T beanWithQux<T>(T bean, String quxVal) {
class BeanWithQux extends T {
private String qux;
BeanWithQux(T bean, String quxVal) {
// Here's where I'd like to copy all of the properties
// from the Bean into the BeanWithQux
qux = quxVal;
}
public getQux() {
return qux;
}
}
return BeanWithQux(bean, quxVal);
}
这就是我卡住的地方。我不知道将给定对象的所有属性复制到我的新对象中。有人有想法吗?理想情况下,我可以使用 lombok 做一些事情(我控制Foo
类,并且可以添加注释,@Builder
如果需要),而不是自己编写一堆反射魔法。
谢谢!