Java将对象的选定值引用到另一个对象?

时间:2016-04-17 12:12:32

标签: java object reference

抱歉,如果这个问题已被提出,但我甚至不知道如何精确地制定它或者找不到它。

我有班级规则和班级事实

public class Rule {
    private Fact first;
    private String operator;
    private Fact second;
    private String operator2;
    private Fact result;
    public boolean fired;
    ...
}


public class Fact {
    private String name;
    private int state;
    private boolean canBeModified;
    ...
}

我根据文件中的内容创建规则,但有两种方法: a && b => cb => a=>此处并不含义,只是结果)

在第二种情况下,当我缺少第二个事实(b=>a)时,我再次使用b并将其设为b && b => a,此处我想将b的值分配给{ {1}}以便a依赖a,稍后当b发生变化时,b.state的变化完全相同。 canBeModified也是如此。只有变量名称应该不同,每个事实都是常量。 如何实现?

2 个答案:

答案 0 :(得分:0)

您可以b指向a

例如:

Fact a = new Fact();
Fact b = a;

现在,当b发生变化时,a也会发生变化,当a发生变化时,b也会发生变化。

答案 1 :(得分:0)

你可以创建一个新的state类和canBeModified,让a和b共享该类的Object:

public class Fact {
    private String name;
    private FactValues values;

    public class FactValues {
        private int state;
        private boolean canBeModified;

        public int getState() {
            return state;
        }

        public void setState(int state) {
            this.state = state;
        }

        public boolean isCanBeModified() {
            return canBeModified;
        }

        public void setCanBeModified(boolean canBeModified) {
            this.canBeModified = canBeModified;
        }
    }

    public Fact(String name, FactValues values) {
        super();
        this.name = name;
        this.values = values;
    }

    public Fact(String name, int state, boolean canBeModified) {
        super();
        this.name = name;

        this.values = new FactValues();
        values.setState(state);
        values.setCanBeModified(canBeModified);
    }

    public FactValues getValues() {
        return values;
    }


    public void setValues(FactValues values) {
        this.values = values;
    }


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getState() {
        return values.getState();
    }

    public void setState(int state) {
        values.setState(state);
    }

    public boolean isCanBeModified() {
        return values.isCanBeModified();
    }

    public void setCanBeModified(boolean canBeModified) {
        values.setCanBeModified(canBeModified);
    }

    public static void main(String[] args) {

        Fact b = new Fact("test", 1,true);
        Fact a = new Fact("another test",b.getValues());

        a.setState(5);
        System.out.println(a.getState());
        System.out.println(b.getState());           
    }
}