Я хочу написать функцию, которая при произвольном java-компоненте в качестве аргумента возвращает объект, являющийся копией этого компонента, но принадлежащий анонимному подклассу типа bean-типа, который содержит дополнительное имущество. Позвольте мне проиллюстрировать пример того, что я до сих пор:Добавить свойство в произвольный java 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
), а не писать кучу отраженной магии.
Спасибо!