当前位置:  开发笔记 > 编程语言 > 正文

检测未初始化对象的类型

如何解决《检测未初始化对象的类型》经验,为你挑选了1个好方法。

假设我有一个未初始化的对象,例如:

MyClass A=null;

如何检测A的类型是MyClass?A instanceof MyClass.class不管用.这是假的.然后A.getClass()抛出一个NullPointerException.有没有办法找到这种未初始化对象的类型?

编辑:

实际情况是MyClassA,MyClassB并且MyClassC是子类MyClass.所以我将使用以下代码:

MyClassB B=null;
MyClass MC=B;

现在,在运行时,我需要确定MC是"实例" MyClassA还是MyClassBMyClassC.有没有办法做到这一点?

编辑2:

通过在运行时检测类型,我将能够执行以下操作:

MyClass C=null;
...
//detect the type of C and instantiate the base class with an instance of that type
MyClass MC=new MyClassC();

基本上,我将传递所有子类的对象,我将必须确定每个对象的类型,并使用该类型实例化基类并返回它.

编辑3:

终于找到了部分方法来做到这一点!依靠多态来做到这一点:

MyClassC C=null;
detect(C);
....
detect(MyClassA a){}
detect(MyClassB b){}
detect(MyClassC c){ //MyClassC detected! }

但是,如果我传递了MyClass对象,这将无效.



1> Eran..:

你知道那个变量的静态(编译时)类型 - 它是MyClass.你不需要instanceofA.getClass.

instanceof或者A.getClass在需要知道变量引用的实例的运行时间时非常有用.当变量包含时,这没有意义null.

编辑:

如果MC为null,则它不是任何实例.如果你写的话没有区别

MyClassB B=null;
MyClass MC=B;

要么

MyClassC C=null;
MyClass MC=C;

要么

MyClass MC=null;

在所有这些情况下,MC它将包含相同的null值,并且除了其编译时类型之外,它将不具有任何类型MyClass.

编辑2:

分配给MC时,可以实例化正确的类:

MyClassC C = null;
MyClass MC = C==null?new MyClassC():C;

在您分配CMC,您知道其类型,C并且您可以创建一个MyClassCif为null 的实例.

推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有