论坛首页 入门技术论坛

关于返回值的处理

浏览 3051 次
该帖已经被评为新手帖
作者 正文
   发表时间:2007-05-05  

 我有一个方法,里面的逻辑代码都一样,而且参数都一样,只是返回值不同。有时候需要的返回值是boolean类型的,有时候需要是List类型等。

因为代码的重用性,所以我不想再写其他的方法。请问有什么办法能解决这个问题?

   发表时间:2007-05-05  
既然逻辑基本都一样那就应该抽出来形成一个独立的方法啊,再根据返回值来添加不同的方法调用该方法即可
0 请登录后投票
   发表时间:2007-05-05  
 
0 请登录后投票
   发表时间:2007-05-05  
我现在就是一个单独的方法,该如何抽出来成一个独立的方法

能不能写一个例子看看呀
0 请登录后投票
   发表时间:2007-05-05  
我们得到固定接口类型的返回值并不仅仅是编程语言的约束,一般还是因为我们可以对这个返回值进行统一的处理,这也是多态的体现。
比方说:
java 代码
  1. YourTask task = someFunction();  
  2. task.call();  

这里的YourTask一般就是一个接口类型,它有call这个方法,所以我们的返回值类型是统一的。

具体到你的情况,也许是设计思路有问题,你的返回值是用来做什么的?能否不使用返回值这种方式?

例如:
java 代码
  1. YourTask yours = someFunction(parameter1);  
  2. task.call();  
  3. OtherTask others = someFunction2(parameter2);  
  4. other.call2();  
如果这里someFunction和someFunction2几乎一样,那么可以这样:
java 代码
 
  1. public void someFunction(String parameter){  
  2.     //your replication code 
  3.     Handler.handle(result);  
  4. }
  5. class Handler{  
  6.     public static void handle(YourTask task){  
  7.         task.call();  
  8.     }  
  9.     public static void handle(OtherTask task){  
  10.         task.call2();  
  11.     }  
  12. }
  13. someFunction(parameter1);  
  14. someFunction(parameter2);

这时,实际上返回值仅仅是一个中间变量。

顺便插一句,代码的重用不是没有前提,没有代价的,为了重用而重用并不总是合理的。

shangmw 写道:

 我有一个方法,里面的逻辑代码都一样,而且参数都一样,只是返回值不同。有时候需要的返回值是boolean类型的,有时候需要是List类型等。

因为代码的重用性,所以我不想再写其他的方法。请问有什么办法能解决这个问题?




0 请登录后投票
   发表时间:2007-05-05  
谢谢楼上大哥,在下获益匪浅

我现在在一家公司里用EJB3.0来做一个电力相关的系统,当然在下才刚出来,经验和其他方面都还不够,所以在做的时候都不是很好

我现在想做这样的一个方法,这个方法是查询数据库的。如果验证数据库中是否有这样的一条数据时,我想它返回一个BOOLEAN值。有时候想显示结果,这时我想它返回一个List值的返回值

由于这样的问题,所以我才考虑怎么来解决这个返回值
0 请登录后投票
   发表时间:2007-05-06  
仅仅只是简单两种情况,简单的抽出公用的逻辑即可,当然如果你认为以后还有必要扩展的话,可以使用fsword的方式,重用是需要代价的,不宜过度重用。
0 请登录后投票
   发表时间:2007-05-06  
请问fsword的方式是什么,能否详细说一下
0 请登录后投票
   发表时间:2007-05-06  
你没看明白他说的方法吗?
实际上返回值仅仅是一个中间变量。


这个就是他的意思,不要将不同的结果作为返回值处理,而是作为一个参量或者判断依据来做,例如

引用

    someFunction(){
       List result = getresult();
       if(result != null && result.size > 0){
           do1(result);
       }else{
           do2(result);
       }
    }


我这个例子和他的有点不一样,他为了达到重用的效果,将不同的处理方式作为不同的TASK对像,而我的方式仅仅是作为不同的方法即可,避免过度重用。
0 请登录后投票
   发表时间:2007-05-06  
多写个方法,copy 就好了。。
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics