getSimpleName() getName() getCanonicalName 这三个Class方法总是分不清
代码如下
@Slf4j
public class ClassNameDemo {
class ClassInner {
}
static class ClassStaticInner {
}
public static void main ( String [ ] args) {
final Class < ClassNameDemo > classNameDemoClass = ClassNameDemo . class ;
final Class < ClassInner > classInnerClass = ClassInner . class ;
final Class < ClassStaticInner > classStaticInnerClass = ClassStaticInner . class ;
log. info ( "ClassNameDemo getSimpleName:{}" , classNameDemoClass. getSimpleName ( ) ) ;
log. info ( "ClassNameDemo getName:{}" , classNameDemoClass. getName ( ) ) ;
log. info ( "ClassNameDemo getCanonicalName:{}" , classNameDemoClass. getCanonicalName ( ) ) ;
log. info ( "----------------------------------------" ) ;
log. info ( "ClassInner getSimpleName:{}" , classInnerClass. getSimpleName ( ) ) ;
log. info ( "ClassInner getName:{}" , classInnerClass. getName ( ) ) ;
log. info ( "ClassInner getCanonicalName:{}" , classInnerClass. getCanonicalName ( ) ) ;
log. info ( "----------------------------------------" ) ;
log. info ( "ClassStaticInner getSimpleName:{}" , classStaticInnerClass. getSimpleName ( ) ) ;
log. info ( "ClassStaticInner getName:{}" , classStaticInnerClass. getName ( ) ) ;
log. info ( "ClassStaticInner getCanonicalName:{}" , classStaticInnerClass. getCanonicalName ( ) ) ;
}
}
输出结果
总结
getSimpleName()获得的是简单的类名 getName()和getCanonicalName()在普通的情况下结果一样,都是包名+类名 getName()和getCanonicalName()在内部类的时候结果不一样,getName()是$
,getCanonicalName()是.