版权声明:转载请注明出处~ https://blog.csdn.net/czjlghndcy/article/details/83620887
Java 中的instanceof
是一个二元操作符(运算符)运算符,由于是字母组成,所以是Java的保留关键字,但是和>=,<=,==属同一类,它的作用是用来判断,instanceof
左边对象是否为instanceof
右边类的实例,返回一个boolean类型值。还可以用来判断子父类的所属关系。
用法1:
boolean result = object instanceof class
参数:
Result:布尔类型。
Object:必选项。任意对象表达式。
Class:必选项。任意已定义的对象类。
说明:
如果 object
是 class
的一个实例,则 instanceof
运算符返回 true
。如果 object
不是指定类的一个实例,或者 object
是 null
,则返回 false
。
用法2、在做项目中用到的实战应用。
A instanceof B ? A : C;
将instanceof
当做一个三目运算符,判断是否A可以转换B
package com.mmall.util;
import com.google.common.collect.Lists;
import com.mmall.pojo.User;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.codehaus.jackson.map.DeserializationConfig;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.SerializationConfig;
import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion;
import java.text.SimpleDateFormat;
import java.util.List;
/**
* @author Chakid
* @since 2018-10-31 20:40
*/
@Slf4j
public class JsonUtil {
private static ObjectMapper objectMapper = new ObjectMapper();
static {
//对象的所有字段全部列入
objectMapper.setSerializationInclusion(Inclusion.ALWAYS);
//取消默认转换timestamps形式 timestamps : 时间印花; 时间戳记
objectMapper.configure(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS,false);
//忽略空Bean转json的错误
objectMapper.configure(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS,false);
//所有的日期格式都统一为以下格式,yyyy-MM-dd HH:mm:ss
objectMapper.setDateFormat(new SimpleDateFormat(DateTimeUtil.STANDARD_FORMAT));
//忽略在json字符串中存在,但是在java对象中不存在对应的属性的情况,防止错误
objectMapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
}
//将对象序列化为String
public static <T> String obj2String(T obj){
if(obj == null){
return null;
}
try {
return obj instanceof String ? (String) obj : objectMapper.writeValueAsString(obj);
} catch (Exception e) {
log.warn("Parse Object to string error",e);
return null;
}
}
//将对象序列化为更美观的String(格式化好的)
public static <T> String obj2StringPretty(T obj){
if(obj == null){
return null;
}
try {
return obj instanceof String ? (String) obj : objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(obj);
} catch (Exception e) {
log.warn("Parse Object to string error",e);
return null;
}
}
/**
* 第一个T为声明该方法为泛型方法 第二个T为返回值的类型为T 第三个T为限制clazz的类型为T 比如List<T>
* @param str
* @param clazz
* @param <T>
* @return
*/
public static <T> T String2Obj(String str,Class<T> clazz){
if(StringUtils.isEmpty(str) || clazz == null){
return null;
}
try {
return clazz.equals(String.class) ? (T)str :objectMapper.readValue(str,clazz);
} catch (Exception e) {
log.warn("Parse string to Object error",e);
return null;
}
}
//测试上面的函数
public static void main(String[] args) {
User u1 = new User();
u1.setId(1);
u1.setEmail("[email protected]");
User u2 = new User();
u2.setId(2);
u2.setEmail("[email protected]");
String user1Json = JsonUtil.obj2String(u1);
String user1JsonPretty= JsonUtil.obj2StringPretty(u1);
log.info("user1Json: {}",user1Json);
log.info("user1JsonPretty: {}",user1JsonPretty);
User user = JsonUtil.String2Obj(user1Json,User.class);
List<User> userList = Lists.newArrayList();
userList.add(u1);
userList.add(u2);
String userListStr =JsonUtil.obj2StringPretty(userList);
log.info("=================");
log.info(userListStr);
System.out.println("end");
}
}
主要看:
return obj instanceof String ? (String) obj : objectMapper.writeValueAsString(obj);
return obj instanceof String ? (String) obj : objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(obj);
这两行,其他和这个知识点无关。obj
是否可以转换为String
,如可以就是(String) obj
这个值,不行就是objectMapper.writeValueAsString(obj)