今天在变量开发的过程中,看到了一段这样的代码,引起了我的思考。如下图所示:

图片说明
这段代码的意思就是对拿到的手机号进行解密,然后取前7位,再将其转化成一个List数组作为入参,调用工具类的checkMobileArea()方法。在这里,使用了Arrays.asList()作为转换成list的转换方式。当然,在我查看checkMobileArea()方法后,这样使用,运行起来没有任何错误。但是,这样做会不会存在风险呢?在此,我进行了一个简单的测试:

图片说明

图片说明

在这里我仿照开发中的代码流程,定义了一个checkMobileArea()方法。在方法里,我唯一的操作就是对这个入参list添加了一个新的手机号前七位,此刻运行main方法:

图片说明

结果报错:Exception in thread "main" java.lang.UnsupportedOperationException

综上,使用Arrays.asList()存在一定的风险!
而且通过分析源码,我们可以知道,Arrays.asList()返回的list并不是我们期望的java.util.ArrayList,而是Arrays的内部类ArrayList。ArrayList内部类继承自AbstractList类,并没有复写父类的add方法,而且父类中add()的实现,就是抛出UnsupportedOperationException。下面是相关的源码:
图片说明

图片说明

分析了Arrays.asList()可能存在的风险以后,以下是我的代码修改方式:

图片说明

图片说明

这样就解决了可能会出现错误的风险。