站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题请教回调的问题

请教回调的问题

摘要: 请教回调的问题


如何将从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....
}
}


看来没有简单的办法了,只能传参数了,还以为只用调个函数就可以了...
不过只传参数也是很简单了...


可以把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;
}
}
}




不太明白你的意思



抛出异常,就能知道是谁调用了


其实说来说去还是要将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作为参数传递过去呢!


另外同意ustbzhangwei(wei) 内嵌类的方法,nwp123(风中浮云) 不知道具体如何操作,能不能再说得详细些。


另外楼主的这种操作不叫“回调”,回调的概念是指java自动执行某些特定规则的函数(这些规则通常由接口来约束)。
楼主说的倒有些“反射”的意思,不过我不知道java反射是否有现成的方法返回函数的调用者。我印象中好像没有。。。还要请教高人。


这个操作的确不是回调,的确是有点反射的意思,inner class是肯定行的,这个早就知道了....
至于用"反射",好像最终还是要传this回去...
上面nwp123的异常处理,实际怎么操作呢?同问>......


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);
}
}

给分。。。


这个问题其实是我想麻烦了 ,传参数是非常简单的,大家都能想到。。。。
也没有什么太大的意义了...
AnyWay 还是感谢大家...


↑返回目录
前一篇: 菜鸟问题,如何从键盘上读取一个字符,并判断是否是字母还是数字?
后一篇: 帮我看一下下面创建jdbc连接怎么会出错