java 中的instanceof 是一个二元操作符(运算符)运算符,由于是字母组成,所以是Java的保留关键字,但是和>=,<=,==属同一类,它的作用是用来判断,instanceof 左边对象是否为instanceof 右边类的实例,返回一个boolean类型值。还可以用来判断子父类的所属关系。
用法:
boolean result = object instanceof class
参数:
Result:布尔类型。
Object:必选项。任意对象表达式。
Class:必选项。任意已定义的对象类。
说明:
如果 object 是 class 的一个实例,则 instanceof 运算符返回 true。如果 object 不是指定类的一个实例,或者 object 是 null,则返回 false。
在做项目中用到的实战应用。
public void exportExcelFileReflect(SXSSFSheet sheet,List<String> properties, List<Object> list, int startRow) throws Exception{
for(Object o : list){
SXSSFRow row = sheet.createRow(++startRow);//从下一行开始
SXSSFCell cell = null;
//T t = dataList.get(i);
//使用反射将数据填充到cell
int cellnum = 0;
for(String p : properties){
PropertyDescriptor pd2 = getPropertyDescriptor(o.getClass(),p);
Method rm = pd2.getReadMethod();
cell = row.createCell(cellnum);
Object value = rm.invoke(o, new Object[] {});
if(value instanceof Double){
cell.setCellValue((Double)value);
}else if(value instanceof Date){
cell.setCellValue(DateUtil.dateToLongString((Date)value));
}else if(value instanceof String){
cell.setCellValue((String)value);
}else if(value instanceof Boolean){
cell.setCellValue((Boolean)value);
}else if(value instanceof Long){
cell.setCellValue((Long)value);
}else if(value instanceof Integer){
cell.setCellValue((Integer)value);
}else if(value instanceof Float){
cell.setCellValue((Float)value);
}else if(value instanceof Short){
cell.setCellValue((Short)value);
}else if(value == null){
cell.setCellValue("");
}else{
cell.setCellValue(value+"");
}
cellnum ++ ;
}
if(startRow % 100 == 0) {
((SXSSFSheet)sheet).flushRows(100);
}
}
}
主要看if(value instanceof Double)之后那一段,其他和这个知识点无关。判断value是不是属于这个Class类的,如果是,返回是true,执行方法体中的cell实例对象的POJO方法)