JAVA:在创建时设置成员数据,而不使用构造函数

时间:2015-02-25 11:01:16

标签: java

我正在使用som生成的类,我需要在创建时设置成员数据。生成的类只有一个默认构造函数,并且没有成员数据的setter。它不会修改类,因为当我再次重新生成类时,修改将被覆盖(这是一个共享项目,所以其他人也可能会覆盖生成的类)。

是否可以做这样的事情。

示例:

public class A{
    private int value;
}

public class B{
    private A a;
    public void initA()
    {
        a = new A(){
            value = 9;
        };
    }
}

3 个答案:

答案 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();
    }
}