class.getName()和class.getSimpleName()

RT、

如果网上一搜,会有很多答案。

譬如:Class类,是获取类的类模板实例对象,通过反射的机制获取。

根据API中的定义:

Class.getName():以String的形式,返回Class对象的“实体”名称;

Class.getSimpleName():获取源代码中给出的“底层类”简称。

单看这种书面文字的话,可能有人还是不明白他们的区别,下面我就将通过代码以及图片的形式,让大家直观地看到它们的区别,代码很简单,结果也很简单。


代码如下:

  1. public class Main {  
  2.       
  3.     private static final String TAG1 = Main.class.getName();  
  4.     private static final String TAG2 = Main.class.getSimpleName();  
  5.       
  6.     public static void main(String[] args) {  
  7.         System.out.println(”getName —– ” + TAG1 + “\n” + “getSimpleName —– ” + TAG2);  
  8.     }  
  9. }  
public class Main {

    private static final String TAG1 = Main.class.getName();
    private static final String TAG2 = Main.class.getSimpleName();

    public static void main(String[] args) {
        System.out.println("getName ----- " + TAG1 + "\n" + "getSimpleName ----- " + TAG2);
    }
}

结果图片如下:



如上图所示,我们可以很清晰明了地看出它们的区别:

getName —-“实体名称” —- com.se7en.test.Main

getSimpleName —- “底层类简称” —- Main

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
在这段代码中,headClazz获取到的是空值,可能是因为你没有将entity包中的user、admin表作为参数传入到CommonReadListener构造函数中。 修改代码,需要将entity包中的user、admin表作为参数传入到CommonReadListener构造函数中,然后在invokeHead方法中获取它们的字段名。代码修改如下: ``` public class CommonReadListener<T> extends AnalysisEventListener<T> implements ReadListener<T> { private Class<T> headClazz; private Class<?>[] entityClasses; public CommonReadListener(Class<T> headClazz, Class<?>... entityClasses) { this.headClazz = headClazz; this.entityClasses = entityClasses; } @Override public void invokeHead(Map<Integer, ReadCellData<?>> headMap, AnalysisContext context) { ExcelPropertyCheck clazzHeadAnno = this.headClazz.getAnnotation(ExcelPropertyCheck.class); Map<String, String[]> fieldNamesMap = new HashMap<>(); for (Class<?> entityClass : entityClasses) { String className = entityClass.getSimpleName(); Field[] declaredFields = entityClass.getDeclaredFields(); String[] fieldNames = new String[declaredFields.length]; for (int i = 0; i < declaredFields.length; i++) { fieldNames[i] = declaredFields[i].getName(); } fieldNamesMap.put(className.toLowerCase(), fieldNames); } if (clazzHeadAnno != null && clazzHeadAnno.required()) { for (Field declaredField : headClazz.getDeclaredFields()) { nullAbleFieldMap.put(declaredField.getName(), true); } } for (Field declaredField : headClazz.getDeclaredFields()) { ExcelPropertyCheck annotation = declaredField.getAnnotation(ExcelPropertyCheck.class); if (annotation != null) { if (annotation.checkFormat()) { checkFormatFieldMap.put(declaredField.getName(), annotation.type() + ""); } if (annotation.required()) { nullAbleFieldMap.put(declaredField.getName(), true); } else { nullAbleFieldMap.remove(declaredField.getName()); } if (annotation.required() && annotation.length() != -1) { checkLengthFieldMap.put(declaredField.getName(), annotation.length()); } String entityClassName = annotation.entityClass().getSimpleName().toLowerCase(); String[] fieldNames = fieldNamesMap.get(entityClassName); if (fieldNames != null) { boolean existField = false; for (String fieldName : fieldNames) { if (fieldName.equals(annotation.fieldName())) { existField = true; break; } } if (!existField) { throw new IllegalArgumentException("The field " + annotation.fieldName() + " not exists in entity class " + annotation.entityClass().getSimpleName()); } } else { throw new IllegalArgumentException("Entity class " + annotation.entityClass().getSimpleName() + " not found"); } } } } } ``` 在修改后的代码中,我们将entityClasses作为参数传入到CommonReadListener构造函数中,并在invokeHead方法中获取它们的字段名,然后根据ExcelPropertyCheck注解中的entityClass和fieldName来判断字段是否存在。这样就可以动态获取到entity包中user、admin表的字段名了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值