У меня вопрос относительно полей класса Java.
У меня есть два класса Java: родительский и дочерний
class Parent{
private int a;
private boolean b;
private long c;
// Setters and Getters
.....
}
class Child extends Parent {
private int d;
private float e;
// Setters and Getters
.....
}
Теперь у меня есть экземпляр класса Parent
. Есть ли способ создать экземпляр класса Child
и скопировать все поля родительского класса, не вызывая сеттеры один за другим?
Я не хочу этого делать:
Child child = new Child();
child.setA(parent.getA());
child.setB(parent.getB());
......
Кроме того, Parent
не имеет настраиваемого конструктора, и я не могу добавить на него конструктор.
Пожалуйста, дайте вам мнения.
Большое спасибо.
Ответ 1
Вы пробовали, используя apache lib?
BeanUtils.copyProperties(child, parent)
http://commons.apache.org/beanutils/apidocs/org/apache/commons/beanutils/BeanUtils.html
Ответ 2
вы можете использовать отражение, я делаю это и отлично работаю для меня:
public Child(Parent parent){
for (Method getMethod : parent.getClass().getMethods()) {
if (getMethod.getName().startsWith("get")) {
try {
Method setMethod = this.getClass().getMethod(getMethod.getName().replace("get", "set"), getMethod.getReturnType());
setMethod.invoke(this, getMethod.invoke(parent, (Object[]) null));
} catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException ex) {
//not found set
}
}
}
}
Ответ 3
Вы пытались сделать это должным образом? Технически вы вызываете сеттеры один за другим, но вам не нужно знать их всех.
Ответ 4
Вы можете установить свои поля как protected
вместо private и получить доступ к ним непосредственно в дочернем классе. Помогает ли это?
Ответ 5
Вы можете создать конструктор Child
, который принимает родительский элемент. Но там вам придется задавать все значения один за другим (но вы можете напрямую обращаться к атрибутам Child, без набора).
Существует обходное решение с отражением, но это только усложняет это.
Вы не хотите его просто для сохранения некоторых типов.