我有一个interface,含有一个void的process()方法,如何在该方法中返回值而不用return方法,类似于回调函数

TGITCIC
Java领域优质创作者
博客专家认证
2008-09-18 03:28:25
public interface ProcessFile {

public void process()throws ProcessException;
}


该方法在具体实现时有可能有N个实现方法,每个方法都是处理一批文件

当然,在处理文件时会遇到一些情况,需要让外部函数知道其处理的结果

考虑到封装性,不想用return,也不想用重载,想用类似于回调函数,让用户输入一个回调的interface,来获得该方法在具体实现中的返回值
...全文
211 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
axman 2008-09-18
  • 打赏
  • 举报
回复
软件设计是根据需要而采用什么技术,而不是学会一种技术非要在设计时采用.何况,一个内部类根本就谈不是什么技术
axman 2008-09-18
  • 打赏
  • 举报
回复
你已经弄不清谁是调用者了.
TGITCIC 2008-09-18
  • 打赏
  • 举报
回复
我自己解决了啦,看看我的解决方法,是不是更封装,大家来评评!


public class ProcessFileCallBack {

private ProcessFile p = null;
public ProcessFileCallBack(ProcessFile event){
p = event;
}
public String processFile(){
String result = "";
p.process();
return result;
}
}



调用测试:

public class MyCallBack implements ProcessFile {


public void process() {

ProcessFileCallBack callback = new ProcessFileCallBack(this){
public String aprocessFile(){
System.out.println("complete");
return "good";
}
};
callback.processFile();
}

}
TGITCIC 2008-09-18
  • 打赏
  • 举报
回复
我是指如果另一个程序员实现我的接口,他要按照:

public class MyCallBack implements ProcessFile {
public void process() {
ProcessFileCallBack callback = new ProcessFileCallBack{
public String onFinish(){
return msg;
}
}
}

}

这样的形式实现回调

那我的这个接口要怎么编写,还请大侠帮忙和指点迷津
williamzl 2008-09-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 axman 的回复:]
实现时增加一个接收结果的字段,

class T implements ProcessFile{
private MessageGeter mg;
//提供一个set方法或构造方法中传入
public void setMessageGeter(MessageGeter mg){this.mg = mg;}

//在处理的时候把返回值放到mg中

public void process()throws ProcessException{
if(mg != null) mg.xxx = rtObject;
}
}

在外部调用:
T t = new T();
t.setMessageG…
[/Quote]
这个想法真不错,受教了啊
axman 2008-09-18
  • 打赏
  • 举报
回复
ProcessFileCallBack 当然不是你来实现,如果是你来实现,调用者怎么知道调用什么方法?
而是调用者来实现,你只管把返回的消息set进去就行了.
TGITCIC 2008-09-18
  • 打赏
  • 举报
回复
我像我的实现的程序能够做成这样:

public class MyCallBack implements ProcessFile {
public void process() {
ProcessFileCallBack callback = new ProcessFileCallBack{
public String onFinish(){
return msg;
}
}
}

}


该如何实现
TGITCIC 2008-09-18
  • 打赏
  • 举报
回复
我像我的实现的程序能够做成这样:

public class MyCallBack implements ProcessFile {
public void process() {
ProcessFileCallBack callback = new ProcessFileCallBack{
public String onFinish(){
return msg;
}
}
}

}
刘振锋 2008-09-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 axman 的回复:]
实现时增加一个接收结果的字段,
class T implements ProcessFile{
private MessageGeter mg;
//提供一个set方法或构造方法中传入
public void setMessageGeter(MessageGeter mg){this.mg = mg;}

//在处理的时候把返回值放到mg中

public void process()throws ProcessException{
if(mg != null) mg.xxx = rtObject;
}
}
[/Quote]
呵呵,这个办法真的不错!
axman 2008-09-18
  • 打赏
  • 举报
回复
如果要写成接口,就把mg定义成接口,传进来,定义setRTValue方法和getRTValue方法,在process()方法中把返回值setRTValue中.
  • 打赏
  • 举报
回复
不明白,没看懂
axman 2008-09-18
  • 打赏
  • 举报
回复
实现时增加一个接收结果的字段,

class T implements ProcessFile{
private MessageGeter mg;
//提供一个set方法或构造方法中传入
public void setMessageGeter(MessageGeter mg){this.mg = mg;}

//在处理的时候把返回值放到mg中

public void process()throws ProcessException{
if(mg != null) mg.xxx = rtObject;
}
}

在外部调用:
T t = new T();
t.setMessageGeter(mg);
t.process();
Object rtValue = mg.xxx;
OK
内存泄漏 2008-09-18
  • 打赏
  • 举报
回复
那不就是用返回值??

62,615

社区成员

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

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