[英]Get type of an object with an object of null?
以下代码编译,但为什么我会得到运行时异常?
String b = null;
System.out.println(b.getClass());
我得到的错误是
java.lang.NullPointerException
即使将对象设置为null,如何获取对象的类型?
编辑我意识到没有对象存在,但仍然有一个String类型的对象b。 即使它没有对象,它仍然有一个类型。 如何获取对象的类型,无论它是否包含对象,或者它是否存在。
当你有
String b = null;
你实际拥有的是一个引用null
的引用类型String
变量。 您不能取消引用null
来调用方法。
使用局部变量,您无法按照要求执行操作。
使用成员变量,您可以使用反射来查找字段的声明类型。
Field field = YourClass.class.getDeclaredField("b");
Class<?> clazz = field.getType(); // Class object for java.lang.String
这里没有对象, null
没有类型。
你不能这样做。
变量与对象不同 。 变量是对象的引用 。
如果您尝试取消引用null
引用(例如,如果您尝试通过null
引用调用方法或访问成员变量),则会出现NullPointerException
。
当变量为null
,表示它不引用任何对象。 当然你不能得到“没有对象”的类型。
其他人已经适当地回答说没有类型,因为没有对象,但如果我正确地阅读这个,我认为你真正要问的是如何检查你的变量被分配的类型。
为此,我将参考此链接: 如何检查Java中的变量类型?
空引用没有类型。 没有指向对象,因此您不能在不存在的对象上调用.getClass()
。
如果您正在寻找编译时类型,则可以编写String.class
。
要回答你的问题,你必须明白你写的是什么。
String b = null;
可以翻译成。 在String类的内存空间中保留并用null填充它。
所以在那个陈述中没有对象。 这就是你得到NullPointerException的原因。
要检索此类声明的类型,您可以使用反射机制,但它仅适用于类成员。
由于上述答案状态正确,这是不可能的。 我想出的最接近的是:
<T extends Object> String typeAndValue(Class<T> type, T value) {
return type.getClass.getSimpleName() + " is: " + String.valueOf(value);
}
你需要显式传递类型,但是你不能传递任何不同于合适类型的东西(仍然可能是supperclass),因为它不会编译。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.