/**
* 作者:liujian on 2018/6/26 10:24
* 邮箱:[email protected]
*/
public class TestClass {
private static final String TAG = "TestClass";
static class staticClass {
}
class NormalClass {
}
public static void main(String[] args){
print(staticClass.class);
print(NormalClass.class);
print(TestClass.class);
}
public static void print(Class c){
Log.e(TAG,"getName: "+c.getName());
Log.e(TAG,"getSimpleName: "+c.getSimpleName());
Log.e(TAG,"getCanonicalName: "+c.getCanonicalName());
Log.e(TAG,"getEnclosingClass: "+c.getEnclosingClass());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
Log.e(TAG,"getTypeName: "+c.getTypeName());
}
}
}
打印结果
06-26 10:46:04.773 24734-24734/com.lj.test E/TestClass: getName: com.lj.test.test_class.TestClass$staticClass
getSimpleName: staticClass
getCanonicalName: com.lj.test.test_class.TestClass.staticClass
getEnclosingClass: class com.lj.test.test_class.TestClass
getName: com.lj.test.test_class.TestClass$NormalClass
getSimpleName: NormalClass
getCanonicalName: com.lj.test.test_class.TestClass.NormalClass
getEnclosingClass: class com.lj.test.test_class.TestClass
getName: com.lj.test.test_class.TestClass
06-26 10:46:04.774 24734-24734/com.lj.test E/TestClass: getSimpleName: TestClass
getCanonicalName: com.lj.test.test_class.TestClass
getEnclosingClass: null
通过上面日志分析我们可以看到:
getName:
内部类: com.lj.test.test_class.TestClass
内部类名称
getSimpleName:
内部类:staticClass
非内部类:TestClass
说明:这个方法返回的是不带包名的类名称。
getCanonicalName:
内部类:com.lj.test.test_class.TestClass.staticClass
非内部类:com.lj.test.test_class.TestClass
说明:很明显内部类的$符号换成了.;标准的类的命名。