例如:
List list;如果list被指向一个实例对象了,则可以利用getclass().toString()来获取。
但是如果list本身为空呢?有没有办法得到定义它的类名?

解决方案 »

  1.   

    够古怪。
    你不是想取null的类名吧。
      

  2.   

    不可以。 null 不属于任何一个类。
      

  3.   

    如果只是定义没有赋值呢?
    没有赋值的话连null也不是。虽然从原理上讲似乎是不行,但我想既然java是强类型语言,定义了就应该可以知道它的类名。
      

  4.   

    楼上的同志们我已经搞定了,其实我研究这个问题是有意义的,目的是想模仿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());
            }
    }
    }
      

  5.   

    注意我最后取得类的简单类名,即最后一个域的名称,目的是为了动态构造bean的注入方法名 set+简单类名
    如果需要完整类名可用getName方法。
      

  6.   

    楼上的可能是我表达不清楚,我的本意是获取定义成员变量的类类型,不是包含成员变量的类类型。表示道歉。
    但包含它的类名也可以获取:field.getDeclaringClass()
    还有,获取类型和类是否实例化无关。你仔细看我的源代码就知道了。
     Class.forName(reflectTest.getClass().getName()).getDeclaredFields();
    红色部分可用文本代替。反射部分在获取类时用的是类名,不用实例化。我只是为了能够运行起来才这么些代码的。
    不要想当然了,仔细品味源代码。