Java开发,方法入参当出参使用的弊端有哪些

Python034

Java开发,方法入参当出参使用的弊端有哪些,第1张

方法视为一个黑箱,参数作为输入,返回值作为输出,这叫天经地义。每个方法都是一个契约,其处置成果,应该体现在返回值上,而不该产生改掉参数甚至全局变量的状态这种副作用,这样才可以根据方法签名得知方法的职责,很多时候我们只从一个方法的签名来了解它,而不去看其方法体,默认认为方法参数在方法执行后保持原样。

如果在方法体里有副作用,则可能会让读代码的别人——也包括几个月后的自己——理解错误。代码规范说白了,就是让代码书写的横无际涯的可能性受到限制,让人的书写和阅读有个附着点,不致发散。Java这块没有大张旗鼓地使用出参的习惯,可以看成默认的禁区,一般应该不要突破。

其实方法的语义在某个时期某个领域曾经是重灾区,就是处理用户请求的方法,在以Servlet(没用到返回值)、Struts1(封装得比较死)、Struts2(没用到参数)为主流的时代。后来SpringMVC成为主流,大家才意识到把编程元素用到它们本来的职责上可以这么爽。这在《Struts2技术内幕》里有过很精彩的叙述,我就不多说了。

作者:祁达方

链接:https://www.zhihu.com/question/54846610/answer/141368454

来源:知乎

著作权归作者所有,转载请联系作者获得授权。

当Java中函数中,想要实现output parameter时,对应的参数,不能是Immutable,即不能是,不可更改的,

而String就是Immutable,所以要换用StringBuilder之类的,Mutable的类型的变量,去实现对应的output parameter

参考:http://stackoverflow.com/questions/2824910/how-to-use-an-output-parameter-in-java

示例:

public

Boolean extractSingleStr(String pattern, String extractFrom, StringBuilder extractedStr) {

Pattern

strP = Pattern.compile(pattern)

Matcher

foundStr = strP.matcher(extractFrom)

Boolean

found = foundStr.find()

if(found)

{

extractedStr.append(foundStr.group(1))

}

return

found

}

使用:

StringBuilder

extractedTitle = new

StringBuilder()

if(extractSingleStr("<p\\s+class=\"mid_tit\">(.+?)</p>",

respHtml, extractedTitle))

{

etUrlOrId.setText(extractedTitle)

}

Jdbc 调用存储过程: callablestatement 调用 java 中的存储过程,这是相当固定的: class.forname (... connection conn = drivermanager.getconnection (.../* * * p 是要调用的存储过程的名称,存储过程的4个参数,4?Cont.preparecall (“{ call p (?,?,?,?) } ")告诉 jdbc 哪些参数是用 java.sql.types 指定的输出参数。第四个呢?输出参数,类型是什么特定写入类型后面的整数 * 类型,这取决于存储过程参数定义的方式。*/cstmt registeroutparameter (3 types) ,一个整数)。第一个参数是 cstmt.registeroutparameter (4,types.integer) /* * * ?第二个呢?第三个是输入参数,第四个是输出参数,第四个是输入和输出 * ,第一个设置为3,第二个设置为4,第四个设置为5 * 没有设置第三个参数,因为它是输出参数 */cstmt.setint (1,3) cstmt.setint (2,4) cstmt.int (4,5) //execution/cstmt。Execute () int three = cstmt.getint (3) int three = cstmt.getint (3) int three = cstmt.getint (3) system.out.println (3) int four = cstmt.getint (4) int four = cstmt.getint (4) system.out.println (4) //在使用它之后不要忘记关闭它。Close () jdbc 调用存储过程,掌握这个程序就足够了。创建或替换过程 p (v _ a in number,v _ b number,v _ ret out number,v _ temp in out number)是 beginif (v _ a