java让我们回调课程的最佳做法是什么?

时间:2013-08-15 12:50:12

标签: java methods

问题在于:

我有一个名为MyClass的班级,这是一个普通班级,有一个变量i,而MyOtherClass里面会有一些逻辑来修改MyClass&#39 ; si值,但我不想将i值传递给MyOtherClass,我希望他们调用addOneminusOne方法。如何修改MyOtherClass来执行此操作?我可以修改MyOtherClass的构造函数来满足此要求。谢谢。

 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 个答案:

答案 0 :(得分: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();
    }
}

答案 1 :(得分:0)

你只需要将MyClass的当前对象传递给My OtherClass。你可以通过

来做到这一点
MyOtherClass a = new MyOtherClass(this); 
MyOtherClass b = new MyOtherClass(this);

现在在MyOtherClass中你需要修改你的构造函数

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

现在您可以从MyOtherClass

调用myClass的任何方法

答案 2 :(得分:0)

将对MyClass的引用传递给MyOtherClass,然后直接调用您需要的方法。

如果您正在寻找更通用的解决方案,请让MyClass实现一些接口,并在MyOtherClass中接受该接口的实例。这将提供更大的灵活性。

//here's your interface.
public interface IMyClass{
    void addOne();
    void minusOne();
}

//implement interface in MyClass.
public class MyClass implements IMyClass{/*...*/}

public class MyOtherClass{
    IMyClass myClass;
    public MyOtherClass(IMyClass myClass){
        this.myClass = myClass;
    }

    public void test(){
        myClass.addOne();
        myClass.minusOne();
    }
}

这适用于比此更复杂的类型。这里有点愚蠢,因为课程做得很少,但也许你的例子被简化为更复杂的东西。只是建议。

答案 3 :(得分:0)

将MyClass的对象传递给MyOtherClass构造函数,如

Class MyOtherClass 
{
MyClass mc;

// constructor
MyOtherClass (MyClass mc)
{
this.mc = mc;
}

void testMethod(){
  mc.i = 10;        // or whatever you want to assign
}

}