0

这是问题所在:

我有一个名为 的类MyClass,它是一个普通类,有一个变量i,并且MyOtherClass内部会有一些逻辑来修改MyClass'si 值,但我不想将i值传递给MyOtherClass,我希望他们调用addOne, 和minusOne方法。我该如何修改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

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 回答
0

传递对MyClassinto的引用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();
    }
}

这适用于比这更复杂的类型。这里有点傻,因为这个类做的很少,但也许你的例子被简化了一些更复杂的东西。只是建议。

于 2013-08-15T12:56:39.243 回答
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
}

}
于 2013-08-15T13:00:16.637 回答