2016-04-17 3 views
0

извините, если этот вопрос уже задан, но я даже не знаю, как его сформулировать точно или просто не могу найти.Ссылка Java на выбранные значения объекта на другой объект?

У меня есть класс Rule и класс Факт

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 (=> не подразумевается здесь, а просто результат)

Во втором случае, когда у меня нет второго факта (b=>a) я использую b снова и сделать это как b && b => a и здесь я хочу назначить значения b для a, так что a зависит от b, а позже, когда b.state изменений, a.state меняется точно так же. То же самое для canBeModified. Только имена переменных должны быть разными, постоянными для каждого факта. Как это достичь?

+0

Почему тогда не просто сделать? –

+1

Вопрос: зачем вам это нужно - так как эта проблема может быть решена легко, но в этом поведении нет особого смысла. Поэтому, возможно, вы хотите рассказать нам, как выглядит «настоящая» проблема, которую вы пытаетесь решить. – GhostCat

+0

Факты приводятся в правилах. У меня есть правило, если b тогда a (a будет иметь те же значения, что и b), но во время создания фактов я знаю только имя этих двух фактов. Значения выходят позже, и когда они приходят, я хочу установить значения b, а значения a изменятся автоматически. Что-то вроде этого – Mike

ответ

0

Вы можете создать новый класс государственных и canBeModified и пусть а и б поделись объект этого класса:

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

Вы можете получить b, чтобы указать на a.

например:

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

Теперь, когда b изменения, a также изменяется, и когда a изменения, b также изменяется.

+0

Вы не просто переписываете класс b классом a? –

+0

Это не удовлетворяет требованию OP о том, что b имеет другое имя. –

+0

@SarkoutMahmoud Прежде всего, это не классы. Во-вторых, Нет. Они оба указывают на один и тот же объект. – Hackerdarshi

Смежные вопросы