问题在于:
我有一个名为MyClass
的班级,这是一个普通班级,有一个变量i
,而MyOtherClass
里面会有一些逻辑来修改MyClass
&#39 ; 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();
答案 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
}
}