我正在使用som生成的类,我需要在创建时设置成员数据。生成的类只有一个默认构造函数,并且没有成员数据的setter。它不会修改类,因为当我再次重新生成类时,修改将被覆盖(这是一个共享项目,所以其他人也可能会覆盖生成的类)。
是否可以做这样的事情。
示例:
public class A{
private int value;
}
public class B{
private A a;
public void initA()
{
a = new A(){
value = 9;
};
}
}
答案 0 :(得分:3)
这样的内容可以让您设置私有字段A.value
的值:
class A {
private int value;
@Override
public String toString() {
return "Value of my private field: " + value;
}
}
class MutableA {
public A a;
private Field value;
public MutableA(A a) {
this.a = a;
try {
this.value = A.class.getDeclaredField("value");
} catch (NoSuchFieldException | SecurityException e) {
e.printStackTrace();
}
this.value.setAccessible(true);
}
void setValue(int value) {
try {
this.value.set(a, value);
} catch (SecurityException | IllegalArgumentException | IllegalAccessException e) {
e.printStackTrace();
}
}
}
你可以像这样使用它:
public class Test{
public static void main(String[] args) {
A a = new A();
System.out.println("before mutation:" + a);
MutableA mutableA = new MutableA(a);
mutableA.setValue(1);
System.out.println("before mutation: " + a);
}
}
输出:
before mutation: Value of my private field: 0
before mutation: Value of my private field: 1
答案 1 :(得分:0)
如果您只有没有参数构造函数,则必须使用setter来设置私有成员。
答案 2 :(得分:0)
public class A{
private int value;
static{
value=10;
}
}
public class B{
private A a;
public void initA()
{
a = new A();
}
}