2012-07-20 48 views

回答

3

你不能那样做。检查出reflection documentation。转到“Class.forName()”部分,在那里,您可以找到一条注释:

这不能用于基元类型。

一种选择可能是创建将认识到基本类型和返回匹配类的方法(即Integer.class,Double.class,等...)

+0

只是一个小小的修改:对于原始类型:'int.class','double.class'等有''''''''''''''''''''''''''''''''''''''''' – yshavit 2012-07-21 05:36:01

+0

另外,double.class和Double.class是完全不同的类(其他原语也是如此)。 – 2012-07-22 03:47:38

3

而不是尝试一些聪明的,因为只有8元会这么糟糕写一个开关/ case语句,或硬编码它们在其他方面,如地图(蝎子在下面评论中建议)?

Spring Framework为其版本的Class.forName采用此方法。

+3

或者一个字符串映射到相应的类 – Scorpion 2012-07-20 17:06:39

+1

不要忘记void作为第9个基本类。 – 2012-07-20 17:11:27

1

如果你点击@ mprivat的链接和阅读节“的语法的.class,”你在开始的时候是什么:

如果类型是可用的,但没有实例,然后就可以 通过追加获得类“ .class“作为类型的名称。这 也是获取原始类型的类最简单的方法。

因此double.class工作得很好。

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; 
    } 
} 
+0

'getPrimitiveClass'不是'public',所以你不能使用它。 – 2012-10-01 08:25:48

+0

是的,你是对的。我已对上述帖子进行了更改。 – Arham 2012-10-01 09:36:45

+0

这是好的,但它不'找到一个原始类型的类,当你所知道的是它的名字' – 2012-10-01 10:00:28

相关问题