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

初始化Java编译时已知的静态类变量,java,class,reflection,Java,Class,Reflection,我想在Java中初始化一个静态类变量: public class NumberExpression { private static Class numberClass = Class.forName("java.lang.Number"); }; 上面的代码段不起作用,因为Class.forName引发ClassNotFoundException。像new Integer.getClass这样的东西不起作用,因为Number是一个抽象类 我想我可以将Class.forName包装成一

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

public class NumberExpression {
    private static Class numberClass = Class.forName("java.lang.Number");
};
上面的代码段不起作用,因为Class.forName引发ClassNotFoundException。像new Integer.getClass这样的东西不起作用,因为Number是一个抽象类

我想我可以将Class.forName包装成一个处理ClassNotFoundException的静态方法,但是有没有更优雅/标准的方法来获得我想要的呢

编辑:


类号更改为java.lang.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

它不工作,因为类号不存在。你的意思是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,为什么不:

private Class numberClass = Number.class;
你为什么不:

private Class numberClass = Number.class;

是的,你说得对。但即使我更改了它,编译器仍然抱怨需要捕获异常。@math4tots:那么捕获异常吧@奥列斯沃思怎么了?它是一个静态变量,所以我不知道应该在哪里设置它。据我所知,我不认为我能捕捉到类主体中的异常…@math4tots:请查看我的更新;我在那里做的是创建一个静态块,在这个静态块中设置了numberClass。你能做到这一点真的很酷。然而我认为达尔基特斯正是我所需要的解决方案。是的,你是对的。但即使我更改了它,编译器仍然抱怨需要捕获异常。@math4tots:那么捕获异常吧@奥列斯沃思怎么了?它是一个静态变量,所以我不知道应该在哪里设置它。据我所知,我不认为我能捕捉到类主体中的异常…@math4tots:请查看我的更新;我在那里做的是创建一个静态块,在这个静态块中设置了numberClass。你能做到这一点真的很酷。然而,我认为达尔基特人正是我所需要的解决方案。