HOWTO · Java
如何在 Java 中检查对象的运行时类:getClass()、getSimpleName() 和 getTypeName()
使用 getClass()、getSimpleName() 和 getTypeName() 检查非 null 对象的运行时类;这些方法显示的是对象的运行时类,而不是变量声明的类型。
本页内容
使用 getClass() 检查非 null 对象的运行时类。它不会显示变量声明的类型。调用 getSimpleName() 可获取不含包名的类名;调用 getTypeName() 则可获取 java.lang.String 这样的类型名称。
在 Java 中使用 getClass().getSimpleName() 检查对象的运行时类
对对象调用 getClass() 可获得它的 Class<?> 对象,再调用 getSimpleName() 获取不含包名的类名。即使变量声明为 Object,结果仍反映对象的运行时类。
运行以下示例:
public class RuntimeSimpleNames {
public static void main(String[] args) {
Object value = "Hello, Java!";
String[] names = {"Ada", "Lin"};
int count = 3;
Object boxedCount = count;
System.out.println(value.getClass().getSimpleName());
System.out.println(names.getClass().getSimpleName());
System.out.println(boxedCount.getClass().getSimpleName());
}
}
String
String[]
Integer
数组也是对象,因此也可以对数组调用 getClass();String[] 值的简单名称是 String[]。int 这样的基本类型没有 getClass() 方法。将它赋给 Object 会把它装箱为 Integer,因此报告的类是 Integer,而不是 int。
在 Java 中使用 getClass().getTypeName() 检查对象的运行时类
getTypeName() 会以 String 形式返回类型名称。对于 String 对象,它会包含包名;getSimpleName() 则不会。
运行以下示例:
public class RuntimeTypeName {
public static void main(String[] args) {
Object value = "Hello, Java!";
String typeName = value.getClass().getTypeName();
System.out.println(typeName);
}
}
java.lang.String
这两种方法都以非 null 对象为输入,并返回其运行时类。只需要简短类名时,选择 getSimpleName();需要带包名的类型名称时,选择 getTypeName()。两者都无法确定变量声明的类型。
总结
需要简短类名时,使用 getClass().getSimpleName();需要包含包名的类型名称时,使用 getClass().getTypeName()。这两种方法适用于对象,包括数组。检查基本类型的值前,先将其装箱;请记住,结果会是包装类,例如 int 对应的 Integer。