请教回调的问题

hansfly 2006-10-10 06:47:23
如何将从Test2中知道是从t1来的,并且得到instance t1,不能往Test2传class Test1参数....

public class Test1{
public int a = 0;

public void a(){
Test2 t2 = new Test2();
t2.go();
}
public static void main(String[] args){
Test1 t1 = new Test1();
t1.a();
}
}

class Test2{

public void go(){
System.out.println("Test2 Instance Running in Test1");
//如何在这里知道得到class Test1的instance t1
//打个简单的比方:就是如何在这里将t1.a修改为1....
}
}
...全文
263 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
hansfly 2006-10-12
  • 打赏
  • 举报
回复
这个问题其实是我想麻烦了 ,传参数是非常简单的,大家都能想到。。。。
也没有什么太大的意义了...
AnyWay 还是感谢大家...
ghosert 2006-10-11
  • 打赏
  • 举报
回复
public class Test1{
public int a = 0;

public void a(){
Test2 t2 = new Test2();
t2.go(this);
}
public static void main(String[] args){
Test1 t1 = new Test1();
t1.a();
}
}

class Test2{

public void go(Test1 t1){
System.out.println("Test2 Instance Running in Test1");
//如何在这里知道得到class Test1的instance t1
//打个简单的比方:就是如何在这里将t1.a修改为1....
t1.a = 1;
System.out.println(t1.a);
}
}

给分。。。
hansfly 2006-10-11
  • 打赏
  • 举报
回复
这个操作的确不是回调,的确是有点反射的意思,inner class是肯定行的,这个早就知道了....
至于用"反射",好像最终还是要传this回去...
上面nwp123的异常处理,实际怎么操作呢?同问>......
zousoft 2006-10-11
  • 打赏
  • 举报
回复
另外楼主的这种操作不叫“回调”,回调的概念是指java自动执行某些特定规则的函数(这些规则通常由接口来约束)。
楼主说的倒有些“反射”的意思,不过我不知道java反射是否有现成的方法返回函数的调用者。我印象中好像没有。。。还要请教高人。
zousoft 2006-10-11
  • 打赏
  • 举报
回复
另外同意ustbzhangwei(wei) 内嵌类的方法,nwp123(风中浮云) 不知道具体如何操作,能不能再说得详细些。
zousoft 2006-10-11
  • 打赏
  • 举报
回复
其实说来说去还是要将this做函数参数传递过去,当然如果楼主一定要用回调函数的方式也是可以的,但是最后你会发现,其实还是将this做参数传递了过去:

首先定义一个自己的Event和处理Event的接口,然后将Test1加入此Listener,也就是addxxxListener(Test2对象),这其实就是调用listenerList.add(ListenerInterface.class, listenerInstance); 然后在适当的时机,也就是楼主例子中的a函数中fire这个事件,其实就是调用listenerList.getListener(xxx).自定义接口函数。而Test2实现接口中的函数,并通过参数xxxEvent.getSource()获得调用者对象,而getSource()是所有Event父类EventObject中定义的函数,其内容就是将xxxEvent构造函数中传递的source对象返回而已,而谁负责调用xxxEvent的构造函数呢?还是Test1的a函数,在调用接口函数时,必须首先实例化参数xxxEvent对象,自然也就要调用其构造函数了,也就是将this作为xxxEvent构造函数的参数。绕了半天圈子,还不如干脆在a函数中调用Test2的函数,并将this作为参数传递过去呢!
nwp123 2006-10-10
  • 打赏
  • 举报
回复
抛出异常,就能知道是谁调用了
gseah 2006-10-10
  • 打赏
  • 举报
回复
不太明白你的意思
ustbzhangwei 2006-10-10
  • 打赏
  • 举报
回复
可以把Test2改为Test1的内部类

public class Test1{
public int a = 0;

public void a(){
Test2 t2 = new Test2();
t2.go();
}
public static void main(String[] args){
Test1 t1 = new Test1();
t1.a();
}

class Test2{

public void go(){
System.out.println("Test2 Instance Running in Test1");
//如何在这里知道得到class Test1的instance t1
//打个简单的比方:就是如何在这里将t1.a修改为1....
a = 1;
}
}
}

hansfly 2006-10-10
  • 打赏
  • 举报
回复
看来没有简单的办法了,只能传参数了,还以为只用调个函数就可以了...
不过只传参数也是很简单了...

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧