技术日志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使用 removeadd 方法会报错 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的代码容易改出代码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这是一段日志记录信息,记录了某个进程的运行情况。具体来说,这段日志包含以下内容: - 时间戳:[2023-06-06 23:21:51.502] - 进程编号:[15] - 日志级别:[info] - 日志来源:[CallProcess#191] - 日志内容:tcpipCall::CallProcess 177; - 时间戳:[2023-06-06 23:21:51.555] - 进程编号:[15] - 日志级别:[info] - 日志来源:[CallProcess#195] - 日志内容:ret : 7 ,errno : 42 ---- str:No message of desired type , buf : Tool(0) - 时间戳:[2023-06-06 23:21:51.555] - 进程编号:[15] - 日志级别:[info] - 日志来源:[Tool#2134] - 日志内容:arg[0]=0 - 时间戳:[2023-06-06 23:21:51.557] - 进程编号:[15] - 日志级别:[info] - 日志来源:[Tool#2152] - 日志内容:index:0 - 时间戳:[2023-06-06 23:21:51.561] - 进程编号:[15] - 日志级别:[info] - 日志来源:[Tool#2176] - 日志内容:index:0, params:[0,0,0,0] - 时间戳:[2023-06-06 23:21:51.562] - 进程编号:[15] - 日志级别:[info] - 日志来源:[CallProcess#256] - 日志内容:func = tool args = 0 return = 0,{},Tool(0); 其中,第2条日志记录了一个系统调用的返回值和错误码,ret : 7 表示该系统调用返回值为7,errno : 42 表示该系统调用的错误码为42("No message of desired type"),即该系统调用请求了一个消息,但没有找到相应的消息。后面的日志记录了一些参数和函数的返回值。具体的含义需要根据上下文和代码来确定。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值