(古怪问题)如何获得一个值为空的变量的定义类名? 例如:List list;如果list被指向一个实例对象了,则可以利用getclass().toString()来获取。但是如果list本身为空呢?有没有办法得到定义它的类名? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 够古怪。你不是想取null的类名吧。 不可以。 null 不属于任何一个类。 如果只是定义没有赋值呢?没有赋值的话连null也不是。虽然从原理上讲似乎是不行,但我想既然java是强类型语言,定义了就应该可以知道它的类名。 楼上的同志们我已经搞定了,其实我研究这个问题是有意义的,目的是想模仿Spring的依赖注入。Spring为何能将符合bean规则的类进行属性依赖注入,我觉得其中肯定需要判断类属性的类类型。不知道Spring如何实现,反正也肯定是反射,搞定了这个我基本已实现了自己的Ioc。当然我现在还研究的很浅,远不能和Spring的Ioc比,我这里是单层的解析,仅作研究,没有显摆的意思。下面是部分源代码(整个Ioc的实现代码我就不提供了太大,其实也不难,真可以自己研究一下搞定),有兴趣的朋友可以继续研究。当然也可以自己去查看spring源代码。import java.lang.reflect.Field;import java.util.Date;public class reflectTest { private int i; private Integer integer; private String string; private Date date; //private *** *****; 自定义类的定义,你自己定义几个吧 public static void main(String[] args) throws Exception { reflectTest reflectTest = new reflectTest(); Field[] fields = Class.forName(reflectTest.getClass().getName()).getDeclaredFields(); for(Field field : fields) { System.out.println(field.getName() + "的类型为" + field.getType().getSimpleName()); } }} 注意我最后取得类的简单类名,即最后一个域的名称,目的是为了动态构造bean的注入方法名 set+简单类名如果需要完整类名可用getName方法。 楼上的可能是我表达不清楚,我的本意是获取定义成员变量的类类型,不是包含成员变量的类类型。表示道歉。但包含它的类名也可以获取:field.getDeclaringClass()还有,获取类型和类是否实例化无关。你仔细看我的源代码就知道了。 Class.forName(reflectTest.getClass().getName()).getDeclaredFields();红色部分可用文本代替。反射部分在获取类时用的是类名,不用实例化。我只是为了能够运行起来才这么些代码的。不要想当然了,仔细品味源代码。 HttpURLConnection异常处理 JFrame 标题栏上,,怎么设置只看见一个关闭按钮 object 是高度抽象的一个类.当初JAVA设计者如何想到这些属性的?? void setSNumber(int xNumber)在类中是什么意思 高分求计算有效工作日的算法 到底什么是句柄? 给个思路! 求助thinking in java后面习题的解答!!! 新手提问J2RE&JDK 输入法问题 求教一个关于split分割字符串以后赋值的问题,多谢了! 关于这句SQL语句的错误
你不是想取null的类名吧。
没有赋值的话连null也不是。虽然从原理上讲似乎是不行,但我想既然java是强类型语言,定义了就应该可以知道它的类名。
Spring为何能将符合bean规则的类进行属性依赖注入,我觉得其中肯定需要判断类属性的类类型。
不知道Spring如何实现,反正也肯定是反射,搞定了这个我基本已实现了自己的Ioc。
当然我现在还研究的很浅,远不能和Spring的Ioc比,我这里是单层的解析,仅作研究,没有显摆的意思。下面是部分源代码(整个Ioc的实现代码我就不提供了太大,其实也不难,真可以自己研究一下搞定),有兴趣的朋友可以继续研究。当然也可以自己去查看spring源代码。import java.lang.reflect.Field;
import java.util.Date;public class reflectTest {
private int i;
private Integer integer;
private String string;
private Date date;
//private *** *****; 自定义类的定义,你自己定义几个吧 public static void main(String[] args) throws Exception {
reflectTest reflectTest = new reflectTest();
Field[] fields = Class.forName(reflectTest.getClass().getName()).getDeclaredFields();
for(Field field : fields) {
System.out.println(field.getName() + "的类型为" + field.getType().getSimpleName());
}
}
}
如果需要完整类名可用getName方法。
但包含它的类名也可以获取:field.getDeclaringClass()
还有,获取类型和类是否实例化无关。你仔细看我的源代码就知道了。
Class.forName(reflectTest.getClass().getName()).getDeclaredFields();
红色部分可用文本代替。反射部分在获取类时用的是类名,不用实例化。我只是为了能够运行起来才这么些代码的。
不要想当然了,仔细品味源代码。