ToB企服应用市场:ToB评测及商务社交产业平台

标题: 技术日记2023-5-15 [打印本页]

作者: 小小小幸运    时间: 2024-11-11 18:43
标题: 技术日记2023-5-15
1、list直接remove不存在的值不会报错

  1. public static void test1() {
  2.     List<String> list = new ArrayList<>();
  3.     list.add("1");
  4.     list.add("2");
  5.     // 删除不存在的元素,返回false
  6.     System.out.println(list.remove("3"));
  7.     // 删除存在的元素,返回true
  8.     System.out.println(list.remove("1"));
  9. }
复制代码
这里有一个有趣的bug:

   使用 Arrays.asList(“1”,“2”); 创建的list使用 removeadd 方法会报错 java.lang.UnsupportedOperationException
  代码块:
  1. public static void test2() {
  2.     List<String> list = Arrays.asList("1", "2", "3");
  3.     System.out.println(list.remove("3"));
  4.     System.out.println(list.remove("1"));
  5.     list.add("3");
  6.     System.out.println(list);
  7. }
复制代码
执行结果:
  1. Exception in thread "main" java.lang.UnsupportedOperationException
  2.         at java.util.AbstractList.remove(AbstractList.java:161)
  3.         at java.util.AbstractList$Itr.remove(AbstractList.java:374)
  4.         at java.util.AbstractCollection.remove(AbstractCollection.java:293)
  5.         at com.wqguo.list.Demo.test2(Demo.java:34)
  6.         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

  1. public static void main(String[] args) {
  2.     List<String> list = null;
  3.     for (String s : list) {
  4.         System.out.println("jksdlf");
  5.     }
  6.     // 可以使用这种代码替换
  7.     Optional.ofNullable(list).orElse(new ArrayList<>()).forEach(s->{
  8.         System.out.println("jlskjdlfk");
  9.     });
  10. }
复制代码
3、判断多个String范例参数恣意为空时可以使用StringUtils.isAnyBlank()方法

  1. public static void main(String[] args) {
  2.     String mobile = "";
  3.     String name = "jslkdf";
  4.     System.out.println(StringUtils.isAnyBlank(mobile, name));
  5. }
复制代码
4、使用Optional来办理list为空产生NullPointerException

使用optional就可以不用判断list是否为空
  1. Optional.ofNullable(list).orElse(new ArrayList<>()).stream().collect(Collectors.toList());
复制代码
5、使用MessageFormat来格式化字符串的输出

  1. public static String test1() {
  2.     String USER_APP_SMS_CAPTCHA_KEY = "app:captcha:{0}:{1}";
  3.     String mobile = "11111111";
  4.     Integer type = 1;
  5.     String format = MessageFormat.format(USER_APP_SMS_CAPTCHA_KEY, mobile, type);
  6.     return format;
  7. }
复制代码
6、在工作中开辟尽量在测试前将代码优化好

否则前期没有优化代码,末了自己都不敢去改了,本来没有bug的代码容易改出代码。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4