方法的参数设置默认值
//例如
void method(String p1, int p2, bool p3=false);
//可以改写成如下所示
//重载
void method(String p1, int p2, bool p3){
// ....
};
void method(String p1, int p2){
bool p3 = false;
// ...
};
这样就相当于给p3一个默认的参数值。
SpringBoot @Value 设置默认值
SpringBoot如果我们使用了@Value来从配置文件读取值, 如果配置文件中没有这个配置项
就会报错:
Could not resolve placeholder 'xxx' in value "${aaa.bbb.ccc}"
解决办法:
@Value("${aaa.bbb.ccc:DefaultValue}")
eg:@Value("${aaa.bbb.ccc:test}") //默认值为test
POJO设置某个属性的默认值
package com.example.think.vo;
import com.example.think.common.util.DateTimeUtil;
import java.math.BigDecimal;
import java.util.Date;
/**
* @program: think
* @description: 对象默认值
* @author: SnailThink
* @create: 2020-09-29 19:14
**/
public class ObjectDefaultValue {
private Integer id =0;
private String name="";
private BigDecimal money=new BigDecimal("0.1");
private Date createTime= DateTimeUtil.getDayDate(new Date());
private String defaultName;
/**
* 实际MSU
*/
private BigDecimal actualMSU;
public BigDecimal getActualMSU() {
return actualMSU == null ? null : actualMSU.setScale(2, BigDecimal.ROUND_HALF_UP);
}
public void setActualMSU(BigDecimal actualMSU) {
this.actualMSU = actualMSU;
}
public String getDefaultName() {
if (getId()!=null && getId()>0){
return "ID存在";
}
return "";
}
public void setDefaultName(String defaultName) {
this.defaultName = defaultName;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public BigDecimal getMoney() {
if (getId() != null && getId() > 0) {
}
return BigDecimal.ZERO;
}
public void setMoney(BigDecimal money) {
this.money = money;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
}
设置对象默认值
//使用反射设置默认值
package com.example.think.common.vincent;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.math.BigDecimal;
import java.sql.Date;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;
/**
* @program: think
* @description:
* @author: SnailThink
* @create: 2020-09-29 19:36
**/
public class ObjInvokeDefault {
public static Object getObjDefault(Object obj) {
// 得到类对象
Class objCla = obj.getClass();
Field[] fs = objCla.getDeclaredFields();
for (int i = 0; i Field f = fs[i];
// 设置些属性是可以访问的
boolean isStatic = Modifier.isStatic(f.getModifiers());
if(isStatic){
continue;
}
// 设置些属性是可以访问的
f.setAccessible(true);
try {
// 得到此属性的值
Object val = f.get(obj);
// 得到此属性的类型
String type = f.getType().toString();
if (type.endsWith("String") && val == null) {
// 给属性设值
f.set(obj, "");
} else if ((type.endsWith("int") || type.endsWith("Integer") || type.endsWith("double")) && val == null) {
f.set(obj, 0);
}else if ((type.endsWith("long")|| type.endsWith("Long") )&& val == null){
f.set(obj, 0L);
} else if (type.endsWith("Date") && val == null) {
f.set(obj, Date.valueOf("1970-01-01"));
}else if(type.endsWith("Timestamp") && val == null){
f.set(obj, Timestamp.valueOf("1970-01-01 00:00:00"));
} else if (type.endsWith("BigDecimal") && val == null) {
f.set(obj, new BigDecimal(0));
}
} catch (Exception e) {
e.printStackTrace();
}
}
return obj;
}
public static List getObjDefaultList(List objList) {
List list=new ArrayList();
for(Object t:objList){
list.add(getObjDefault(t));
}
return list;
}
}
空指针异常出现的几种原因:
//java.lang.NullPointerException
1、字符串变量未初始化
2、接口类型的对象没有用具体的类初始化,比如:
Map map // 会报错
Map map = new Map(); //则不会报错了
3、当一个对象的值为空时,你没有判断为空的情况。
4、字符串与文字的比较,文字可以是一个字符串
或Enum的元素,如下会出现异常
String str = null;
if(str.equals(“Test”)){
//这里的代码将不会被触发,
因为会抛出java.lang.NullPointerException异常。
}
5、优先使用String.valueOf()方法代替toString()
当程序代码需要对象的字符串表示形式时,
请避免使用该对象的toString方法。
如果你的对象的引用等于null,NullPointerException则会抛出,
使用静态String.valueOf方法,
该方法不会抛出任何异常并打印"null"
6、class被声明了类型, 默认 class = null;
这样在调用class中方法的时候系统只能给你个空指针异常,
给其实例化就好了:class = new Class();
7、返回null,方法的返回值不要定义成为一般的类型,
而是用数组。这样如果想要返回null的时候
就能避免许多不必要的NullPointerException
关注
如果你觉得我的文章对你有帮助话,欢迎点赞? 关注❤️ 分享?!
如果本篇博客有任何错误,请批评指教,不胜感激!
点个在看,分享到朋友圈,对我真的很重要!!!