空Java对象(null)怎么获得其Class Type

来源:百度知道 编辑:UC知道 时间:2024/06/16 11:10:03
如果是非空对象的话我可以用obj.getClass();但如果obj是null的话我怎么获得其Class类型?
请不懂还要装懂的人不要随意回答这个问题,谢谢配合。
谢谢hero_return的回答:
你的回答没有错误,null是没有被分配任何地址的,所以原理上他不属于任何Type,但我的问题不在null身上,而是在变量上,如下:
String a = null;
a = new HashMap();
这样显然是不可以的,编译器它会检查a的type然后告诉你这样是错误的。
说明虽然a没有分配任何地址,但编译器知道a是什么Type了,这样的话我怎么可以像编译器一样知道这个a就是String。不会错误的发生a = new HashMap();这样的错误。
------------------------------
想了半天,做了一些实验,直接获取是不可能的了,想了一个折中的方法,因为这种情况一般出现在Field里面所有为所有的Field都建一个get的方法,然后通过反射找到这些方法返回的类型,从而得到这些没有被initial的Field的类型,问题暂时解决,谢谢。 分就给hiro_return吧。

我猜想楼主是这样想的:

例如String str=null,这里str已经被定义为了String类型,怎样获取str的class类型?

不知是不是,如果是这样,那就错了,因为这里str还是个null没有定义为任何类型,所以不能用getClass()来获取,也没有Class类型。

这是我的一些理解,楼主可以参考下

编译器的语法检查不是由JAVA实现的。
我的感觉是你的这种要求做不到。

因为错误不是在运行时报出的,而是根本无法通过语法检查

public class Test{
public static void main(String[] args){
String a = null;
if (false){
a = new Test();
}else{
a = "abc";
}
}
}
这个是错的。

不能,对象变量是一个引用,他的操作其实是调用的它所指的对象的操作,如果对象是null,则肯定会出错。
null对象的类型是<nulltype>

hero_return的回答很正确,空对象当然就没有对象类型

null就不能用getClass()方法吗? 试了吗?

请问楼主是在什么场景下有这种需求?