I have a base class say
class A {
private String name;
private String age;
//setters and getters for same
}
还有一个子类称为
class B extends A {
private String phone;
private String address;
//setters and getters for same
}
现在我有一个A类的实例,除此之外还需要设置B类中的字段,所以代码应该是这样的:
A instanceOfA = gotAFromSomewhere();
B instanceOfB = constructBFrom(instanceOfA);
instanceOfB.setPhone(getPhoneFromSomewhere());
instanceOfB.setAddress(getAddressFromSomewhere());
我可以使用给定的A来实例化B,但我不想这样做
B constructBFrom(A instanceOfA) {
final B instanceOfB = new B();
instanceOfB.setName(instanceOfA.getName());
instanceOfB.setPhone(instanceOfA.getAge());
return B;
}
我希望您能提供一个通用的功能来构建对象,例如:
public class SomeUtility {
public static <T1, T2> T2 constructFrom(T1 instanceOfT1, Class<T2> className) {
T2 instatnceOfT2 = null;
try {
instatnceOfT2 = className.newInstance();
/*
* Identifies the fields in instanceOfT1 which has same name in T2
* and sets only these fields and leaves the other fields as it is.
*/
} catch (InstantiationException | IllegalAccessException e) {
// handle exception
}
return instatnceOfT2;
}
}
这样我就可以用它作为
B constructBFrom(A instanceOfA) {
return SomeUtility.constructFrom(instanceOfA, B.class);
}
此外,用例不仅限于父子类,而且此实用函数可以用于适配器用例。
PS- A和B是第三方类,我只能使用这些类,因此无法对A和B进行任何修改。
A
的构造函数B
。 - Sotirios DelimanolisList
创建一个特定的XXXList
。尽管你可能是对的 - 我也对楼主的动机持怀疑态度 :) - Honza ZideksetName
和setAge
,则无法设置B
的名称和年龄,因为如所写,B
没有以名称和年龄作为参数的构造函数。顺便说一下,instanceOfA.getPhone()
是一个编译错误,因为A
没有phone
或getPhone
。 - David Conrad