3

对于原始类型:int、double、short 等...

鉴于:

String typeName = "double";

我怎么得到double.class

对于常规课程,我们可以执行以下操作:

String typeName = "java.lang.Integer"
Class<?> clazz = Class.forName(typeName);  
// Class.forName(typeName) returns Double.class
4

4 回答 4

3

与其尝试一些聪明的东西,因为只有 8 个原语,写一个 switch/case 语句,或者以其他方式对它们进行硬编码,比如 Map(Scorpion 在下面的评论中建议)会不会太糟糕?

Spring Framework将这种方法用于其 Class.forName 版本。

于 2012-07-20T17:04:42.913 回答
3

你不能那样做。查看反射文档。转到“Class.forName()”部分,在那里,您可以找到一条注释:

这不能用于原始类型。

一种选择可能是创建一个可以识别原始类型并返回匹配类的方法(即 Integer.class、Double.class 等......)

于 2012-07-20T17:09:34.367 回答
1

如果您单击@mprivat 的链接并阅读“.class 语法”部分,您一开始会得到:

如果类型可用但没有实例,则可以通过将“.class”附加到类型名称来获得类。这也是获取原始类型的 Class 的最简单方法。

所以double.class工作得很好。

于 2012-07-20T17:59:19.293 回答
1

当您只知道它的名称时,这是查找原始类型类的代码。

public class CheckPrimitve {
    public static void main(String[] args) {
        Sample s = new Sample();
        try {
            System.out.println(s.getClass().getField("sampleDouble").getType() == double.class); // returns true
            System.out.println(s.getClass().getField("sampleDouble").getType().isPrimitive()); // returns true
        } catch (NoSuchFieldException e) {          
            e.printStackTrace();
        } catch (SecurityException e) {
            e.printStackTrace();
        }       
    }
}

class Sample {
    public double sampleDouble;
    public Sample() {
        sampleDouble = 10d;
    }
}
于 2012-10-01T06:09:59.510 回答