为了在 Java 中返回带有类名的包名,我一直使用getName()
. 我注意到该方法显然getCanonicalName()
返回相同的东西。
仅查看自定义方法的示例toString()
:
@Override
public String toString() {
return this.getClass().getName();
}
Isso 显然等同于:
@Override
public String toString() {
return this.getClass().getCanonicalName();
}
getCanonicalName()
和方法之间的实际区别是什么getName()
?
getName()以字符串形式返回此类对象表示的实体(类、接口、数组、原始类型或 void)的名称。此名称用于使用Class.forName()动态加载类
getCanonicalName()返回由 Java 语言规范定义的基础类的规范名称。如果基础类没有规范名称(即,如果它是本地或匿名类或组件类型没有规范名称的数组),则返回 null。这是将在导入语句中使用并唯一标识类的名称。它在记录操作期间很有用。
获取为输出:
我认为添加以下内容也很重要:
getSimpleName() 返回源代码中指示的基础类的“简单名称”。如果基础类是匿名的,则返回一个空字符串。松散地标识类,在记录操作期间可能很有用,但不保证是唯一的。
获取为输出:
一个重要的区别是,如果您使用匿名类,则在尝试使用以下方法获取类名时可以获得空值
getCanonicalName()
获取名称()
获取规范名称()
获取简单名称()
我用一个测试给你解释一下:
结果:
看这个的结果是:
该名称是您将用于动态加载类的名称,例如,
Class.forName
默认ClassLoader
调用。规范名称是将在导入语句中使用的名称,并将唯一标识类。
toString
它在日志操作期间很有用。