0

問題は次のとおりです。

という名前のクラスを取得しましたMyClass。これは通常のクラスで、変数iがあり、 'si 値MyOtherClassを変更するロジックが内部にありますが、値をにMyClass渡したくありません。を変更するにはどうすればよいですか? のコンストラクターを変更して、この要件を満たすことができます。ありがとう。iMyOtherClassaddOneminusOneMyOtherClassMyOtherClass

 public class MyClass{

   int i;

   public void myMethod(){

     //I would like to myOtherClass a, b can call back MyClass's addOne, and minusOne
     MyOtherClass a = new MyOtherClass(); 
     MyOtherClass b = new MyOtherClass();

     a.runLogic(); 
     b.runLogin();   
   }

   public void addOne(){
     i++;   
   }

   public void minusOne(){
     i--;   
   }  

   pubic void printI(){
    System.out.print(i);
   }
}

使用するコードMyClass

MyClass myClass = new MyClass(); 

myClass.myMethod(); 

myClass.printI();
4

4 に答える 4

5

this他のクラス コンストラクターまたは runLogic メソッドに引数として渡すだけです。

public class MyClass {
    private int i;

    pulic void addOne() {
        i++;
    }

    public void myMethod() {
        MyOtherClass c = new MyOtherClass(this);
        c.runLogic();
    }   
}

public class MyOtherClass {
    private MyClass myClass;

    public MyOtherClass(MyClass myClass) {
        this.myClass = myClass;
    }

    public void runLogic() {
        myClass.addOne();
    }
}
于 2013-08-15T12:55:44.970 に答える
0

MyClass の現在のオブジェクトを My OtherClass に渡すだけです。あなたはこれを行うことができます

MyOtherClass a = new MyOtherClass(this); 
MyOtherClass b = new MyOtherClass(this);

MyOtherClass 内で、コンストラクターを変更する必要があります

public MyOtherClass(MyClass myClass) {
        this.myClass = myClass;
    }

これで、MyOtherClass から myClass の任意のメソッドを呼び出すことができます

于 2013-08-15T12:56:16.613 に答える