2021-07-20优雅代码以及一些问题

优雅代码

一、使用Lombok的利弊:
好处:减少大量的模板代码;代码可读性强;减少代码冲突;lombok处理的toString方法,hash, equal方法等内容,当增加新属性的时候,以上方法都不需要重新编写,而是lombok直接帮助处理的,不会出现遗漏的问题和情况;
不足:要求IDE增加对lombok的支持(可能引用jar);如果你想确认某个set或get方法是否在程序中被调用,你无法找到哪里使用的。我认为这样的操作是违背了bean使用的初衷,bean尤其数据库和java类的映射bean,java对bean的定义和使用就是无参数的构造方法和set和get方法,而不应该在bean中处理任何和业务有任何关系的逻辑;

二、优雅代码:

  1. 用最少的代码实现字符串拼接,并且每个拼接字符串中间用特殊符号区隔:
//bad
StringBuilder str = new StringBuilder();
for(index){
  str.append(index).append(",");
}
str.subString(删除最后一个逗号);

//god
StringJoiner sj = new StringJoiner(",");
for(index){
  sj.add(index);
}
String str = sj.toString();

// god
String joiner = new StringJoiner(" , ")
		.add("groupName:" + groupName)
		.add("jobName:" + jobName)
		.add("cronExpression:" + cronExpression)
		.add("beginTime:" + beginTime)
		.add("endTime:" + endTime).toString();
logger.info(joiner); // result : groupName:xx,jobName:yy,cronExpression:zz,beginTime:xx,endTime:xx...
  1. 不要在循环中调用任何查询数据库的方法
  2. pojo的get/set方法应该是纯粹的,如果非要给默认值,那么建议是在POJO的属性上赋值,而不是在get/set方法中。
  3. 推荐使用Apache common、Google guava等主流开源核心库,能让你在String、集合、并发、缓存等方面代码更加优雅简便
// Instead of "new ArrayList()"
List<String> list = com.google.common.collect.Lists.newArrayList();
list.add("");
// Instead of "list != null && list.size() > 0"
boolean isNotEmpty = org.apache.commons.collections4.CollectionUtils.isNotEmpty(list);
// Cache of LRU
CacheBuilder.newBuilder().maximumSize(100);

三、FullGC被触发,会引起应用访问中断(STW, stop the world),发生场景包括:System.gc()、老年代空间不足、Metaspace空间不足、过大的对象超过老年代阈值等。
利用jdk工具的 jstat 命令来监控GC状态。进入jdk\bin目录下(当然如果设置了JAVA_HOME,就可以直接输入命令):
./jstat -gccause 10592 (意思是: 跟踪java进程10592,每3秒打印一次)
排查jvm问题,是一定要学会使用jdk工具的,在linux下常用的是jstat、jutil、jinfo、 jps、jstack等,每个命令都值得深入研究学习他们的作用。他们都在jdk\bin目录下。
如果在windows服务器,那就可以用jvisualvm.exe,也是jdk自带的可视化工具。

问题

1.java: -source 1.5 中不支持 diamond 运算符 (请使用 -source 7 或更高版本以启用 diamond 运算符)

问题:
java: -source 1.5 中不支持 diamond 运算符 (请使用 -source 7 或更高版本以启用 diamond 运算符)

场景:
往idea导入项目-模块的时候,编译时报错

原因:
该项目中的Modules中的Language level为1.5,版本较低,不支持diamond运算符(<>).

解决:
File - Project structure - Modules - Sources - Language level,修改成高版本

后续:
java:Compilation failed: internal java compiler error
解决:File - Settings,搜索框中输入Java Compile 进入
修改Modules的Target bytecode version 与Language level一致即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值