Java 传参方式

要说的不是Java传值还是传引的问题,而是在程序中,一个方法获取到上层调用传参的方式有哪些,使用场景都是怎么样的问题。

参数列表

这个应该是最常用的传参方式,显式的将参数类型、个数写在方法的参数列表中,每个方法有什么参数都能明显的知道,IDE也可以方便的分析出调用方法、参数调用的代码块。参数列表最具争议的应该是该把所有的参数罗列出来,还是为了减少个数而封装一个参数DTO。就个人而言,一般业务类型的方法如果参数较多的话,我会封装一个DTO并做好注释,而如果是一些工具、通用类的方法,则会罗列出所有的参数方便他人使用。

ThreadLocal

这个在面试中高频出现的考点,而在平时开发中如果能合理使用,也能让代码写得更优雅,模式更灵活。ThreadLocal可以在同一个线程中共享对象并保证线程隔离,所以也可以当成传参的一种方式,需要注意的是这是一种隐式的传参,能让代码看起来更优雅,也能让代码更晦涩,通常在一些和链路相关的地方使用。例如需要在线程中埋一些分析统计的工具,例如调用次数、时间等,就可以寄存一些数据在ThreadLocal中。通常会用在一些和业务不相关的地方(非绝对,例如将Session放在ThreadLocal也是可以的)。使用ThreadLocal的时候通常会出现子线程访问父线程的情形,如果是线程池的场景,可以参考博客ThreadLocal父子线程传递实现方案。

DB

DB传值可能就是一种宏观意义上的传值了,平时用的也很多,通过一些参数在DB(SQL、NoSQL、Cache)里获取到相应的值,也就方法能获取到的数据更多了。DB传值需要注意的就是在分布式的场景下,如果DB对象结构发生了改变,那么首次热更新服务器的时候需要做好新、老对象的兼容,否则未更新的服务器可能会接收到新的对象,抛出对象转换异常,反之亦然。

你可能感兴趣的:(Java 传参方式)