什么是魔法值?其应该是C和C++语言中的一个概念,在字节码层面被用作内存地址的偏移量。在JAVA中,这个概念被赋予了新的意义,通常是指在代码中直接出现的数值或字符串,只有在这个数值记述的那部分代码才能明确其含义的数值或字符。
禁用的原因:
比如说以下示例中的zhangSan,
if ("zhangSan".equals(key)) {
update.set("password1", document.getString("zhangSan"));
String ufPassWord = URLDecoder.decode(document.getString("zhangSan"), "UTF-8");
String password = MD5Util.MD5Encode(MD5Util.decrypt(zhangSan));
update.set(key, password); //密码保存
} 修改后
final String PASSWORD_CONTENT = "zhangSan";
if (PASSWORD_CONTENT .equals(key)) {
update.set("password1", document.getString(PASSWORD_CONTENT));
String ufPassWord = URLDecoder.decode(document.getString(PASSWORD_CONTENT), "UTF-8");
String password = MD5Util.MD5Encode(MD5Util.decrypt(PASSWORD_CONTENT));
update.set(key, password); //密码保存
} 原因是
@Service
public class CommonService {
@Autowired
private MongoTemplate mongoTemplate;
}应修改为
@Service
public class CommonService {
private MongoTemplate mongoTemplate;
@Autowired
public CommonService (MongoTemplate mongoTemplate){
this.mongoTemplate=mongoTemplate;
}
}原因是
原因是
null而引发的NullPointerException// 传统方式
String value = getValue();
if (value != null) {
// 处理非空值
} else {
// 处理空值
}修改后
Optional<String> optionValue=Optional.ofNullable(getValue);
optionValue.ifPresent(val ->{
//处理非空值
});
optionValue.orElse(“defalut”); Optional 类是 Java 8 引入的一个新特性,旨在解决空指针异常(NullPointerException)问题,提供一种优雅的处理 null 值的方式。Optional 类是一个容器,它可以包含一个值或者不包含任何值(即为空)。使用 Optional 可以显式地表示一个值可能存在也可能不存在,从而避免直接使用 null 值。
如何使用 Optional 创建 Optional 对象:
检查和获取值:
解决的问题
示例:假设我们有一个用户类 User,其中包含一个地址类 Address,地址类中有一个城市字段 city。我们想要获取用户的城市的名称,但是用户、地址或城市可能为 null。
public class User {
private Address address;
// getters and setters
}
public class Address {
private String city;
// getters and setters
}
// 使用 Optional 避免 NullPointerException
public String getCityName(User user) {
return Optional.ofNullable(user)
.map(User::getAddress)
.map(Address::getCity)
.orElse("Unknown City");
}
//在这个例子中,如果 user、address 或 city 为 null,getCityName 方法将返回 "Unknown City",而不是抛出 NullPointerException。注意事项
if(!CollectionUtils.isEmpty(statusNameList)){
if(statusNameList.size() == 1){
it.put("statusName", statusNameList.get(0));
}
}可修改为
if(!CollectionUtils.isEmpty(statusNameList) && statusNameList.size() == 1){
it.put("statusName", statusNameList.get(0));
}
//或者修改为
Optional.ofNullable(statusNameList)
.filter(list -> list.size() == 1)
.ifPresent(list -> it.put("statusName", list.get(0)));一个类也好,一个方法也好,真心不要太长,把所有的逻辑一股脑写在一起。如果这么做了,后面维护时,去找问题时真的很累,由期是交由本身对此代码逻辑不熟悉的人,眼累、心累,满脑会飘菜刀的,结合单一职责原则SRP,每个方法应该只做一件事,如果逻辑真的很复杂,建议拆成多个小方法,不要循环套训话,判断套判断的。方法长度建议在5-20行适中(当然这不是标准),这样会让逻辑清晰、也有勇气看下去,也便于排查问题或测试。
public Document getAreaSecurityTest(){
Document info = new Document();
return info;
}修改为
public Document getAreaSecurity(){
return new Document();
}原因: Boolean类型只有在需求表示一个可能为null的布尔值时使用,它是一个对象,使用时涉及到自动装箱(boolean到Boolean)和拆箱的操作(Boolean到boolean),底层是有性能开销的。Boolean对象占用现多的内存空间,因为它是一个对象,需要额外的内存来存储对象头和引用。
Boolean b = false
if (b) { // Noncompliant, it will throw NPE when b == null
foo();
} else {
bar();
}修改为
//这段代码只是想表述不要用包装类
boolean b=false;
if(b){
....
}else{
....
}StringBuilder 和 StringBuffer 都是 Java 中用于处理可变字符串的类,但它们之间有一些关键的区别:
1.线程安全性:
2.性能:
选择使用 StringBuilder 替换 StringBuffer 的情况包括