ToB企服应用市场:ToB评测及商务社交产业平台
标题:
技术日记2023-5-15
[打印本页]
作者:
小小小幸运
时间:
2024-11-11 18:43
标题:
技术日记2023-5-15
1、list直接remove不存在的值不会报错
public static void test1() {
List<String> list = new ArrayList<>();
list.add("1");
list.add("2");
// 删除不存在的元素,返回false
System.out.println(list.remove("3"));
// 删除存在的元素,返回true
System.out.println(list.remove("1"));
}
复制代码
这里有一个有趣的bug:
使用
Arrays.asList(“1”,“2”);
创建的list使用
remove
和
add
方法会报错
java.lang.UnsupportedOperationException
代码块:
public static void test2() {
List<String> list = Arrays.asList("1", "2", "3");
System.out.println(list.remove("3"));
System.out.println(list.remove("1"));
list.add("3");
System.out.println(list);
}
复制代码
执行结果:
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.remove(AbstractList.java:161)
at java.util.AbstractList$Itr.remove(AbstractList.java:374)
at java.util.AbstractCollection.remove(AbstractCollection.java:293)
at com.wqguo.list.Demo.test2(Demo.java:34)
at com.wqguo.list.Demo.main(Demo.java:13)
复制代码
缘故原由如下:
调用Arrays.asList()产生的List中的add、remove方法报非常,是因为
Arrays.asList()返回的List实现类是自己内部实现的ArrayList
,不是我们常用的java.util.ArrayList。Arrays的
内部类ArrayList
和java.util.ArrayList都是继续AbstractList,但是在Arrays的内部类ArrayList中
没有重写
AbstractList的add和remove方法。
AbstractList中add和remove方法都是默认throw UnsupportedOperationException的。
2、增强for循环如果list为null会报java.lang.NullPointerException
public static void main(String[] args) {
List<String> list = null;
for (String s : list) {
System.out.println("jksdlf");
}
// 可以使用这种代码替换
Optional.ofNullable(list).orElse(new ArrayList<>()).forEach(s->{
System.out.println("jlskjdlfk");
});
}
复制代码
3、判断多个String范例参数恣意为空时可以使用StringUtils.isAnyBlank()方法
public static void main(String[] args) {
String mobile = "";
String name = "jslkdf";
System.out.println(StringUtils.isAnyBlank(mobile, name));
}
复制代码
4、使用Optional来办理list为空产生NullPointerException
使用optional就可以不用判断list是否为空
Optional.ofNullable(list).orElse(new ArrayList<>()).stream().collect(Collectors.toList());
复制代码
5、使用MessageFormat来格式化字符串的输出
public static String test1() {
String USER_APP_SMS_CAPTCHA_KEY = "app:captcha:{0}:{1}";
String mobile = "11111111";
Integer type = 1;
String format = MessageFormat.format(USER_APP_SMS_CAPTCHA_KEY, mobile, type);
return format;
}
复制代码
6、在工作中开辟尽量在测试前将代码优化好
否则前期没有优化代码,末了自己都不敢去改了,本来没有bug的代码容易改出代码。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4