在Java中初始化编译时已知的静态类变量

时间:2012-06-23 23:28:59

标签: java class reflection

我想在Java中初始化一个静态的Class变量:

public class NumberExpression {
    private static Class numberClass = Class.forName("java.lang.Number");
};

上述代码段无效,因为Class.forName会引发ClassNotFoundException。像new Integer().getClass()这样的东西不起作用,因为Number是一个抽象类。

我想我可以将Class.forName包裹在处理ClassNotFoundException的静态方法周围,但是有更优雅/标准的方式来获取我想要的东西吗?

编辑:

(类“Number”更改为“java.lang.Number”)

2 个答案:

答案 0 :(得分:5)

它不起作用,因为类Number不存在。你的意思是java.lang.Number

您可以尝试以下方式:

public class NumberExpression {
    private static Class numberClass;
    static {
        try {
            numberClass = Class.forName("java.lang.Number");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
};

但是,当您尝试加载的类是动态的时,这才有意义,否则您可以使用自己的类(即Number.class

答案 1 :(得分:4)

你为什么不这样做:

private Class numberClass = Number.class;