2016-04-17 10 views
0

申し訳ありませんが、この質問は既に尋ねられましたが、私はそれを正確に定式化する方法を知っていないか、それを見つけることができません。オブジェクトの選択された値を別のオブジェクトに参照するJava?

私はクラスのルールとクラスファクト私は、ファイルに持っているものに基づいていますが、2つの方法があります作成

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 => cまたはb => a=>は、ここでは意味合いではなく、単に結果)

を第2のケースで

私は2番目という事実(b=>a)を欠くとき、私は再びbを使用し、b && b => aと、ここで私はとなるようabの値を割り当てるようにそれを作りますはbに依存し、後でb.stateが変更された場合、a.stateはまったく同じになります。 canBeModifiedと同じです。変数名は、それぞれの事実に対して一定でなければならない。 これを達成するには?

+0

を? –

+1

質問:なぜあなたはそれを望んでいますか?この問題は簡単に解決できるので、その行動にあまり意味がありません。だから、あなたが解決しようとしているような "本当の"問題がどのようになっているかを教えてください。 – GhostCat

+0

事実はルールに入っています。私はルールがあります。それでは、a(aはbと同じ値を持ちます)が、事実を作成するときには、その2つの事実の名前だけが分かります。値は後で来るし、来るときには、bの値を設定したいし、aの値が自動的に変わる。このようなもの – Mike

答えて

0

あなたは状態とcanBeModifiedの新しいクラスを作成し、そのクラスのaとbを共有オブジェクト聞かせできます。そして、ちょうどAをしないのはなぜ

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());   
    } 
} 
+0

これは試してみると良いよね。 – Mike

+0

ありがとう、それはうまくいく。 – Mike

+0

うれしい – Turo

0

baを指すようにすることができます。

例:

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

さて、baも変化の変化、およびときa変更、bも変化するとき。

+0

あなたはクラスaでクラスbを上書きしていませんか? –

+0

これは、bが異なる名前を持つOPの要件を満たしていません。 –

+0

@SarkoutMahmoudまず第一に、クラスではありません。第二に、いいえ、彼らは両方とも同じオブジェクトを指しています。 – Hackerdarshi

関連する問題