对于原始类型:int、double、short 等...
鉴于:
String typeName = "double";
我怎么得到double.class
?
对于常规课程,我们可以执行以下操作:
String typeName = "java.lang.Integer"
Class<?> clazz = Class.forName(typeName);
// Class.forName(typeName) returns Double.class
对于原始类型:int、double、short 等...
鉴于:
String typeName = "double";
我怎么得到double.class
?
对于常规课程,我们可以执行以下操作:
String typeName = "java.lang.Integer"
Class<?> clazz = Class.forName(typeName);
// Class.forName(typeName) returns Double.class
与其尝试一些聪明的东西,因为只有 8 个原语,写一个 switch/case 语句,或者以其他方式对它们进行硬编码,比如 Map(Scorpion 在下面的评论中建议)会不会太糟糕?
Spring Framework将这种方法用于其 Class.forName 版本。
你不能那样做。查看反射文档。转到“Class.forName()”部分,在那里,您可以找到一条注释:
这不能用于原始类型。
一种选择可能是创建一个可以识别原始类型并返回匹配类的方法(即 Integer.class、Double.class 等......)
如果您单击@mprivat 的链接并阅读“.class 语法”部分,您一开始会得到:
如果类型可用但没有实例,则可以通过将“.class”附加到类型名称来获得类。这也是获取原始类型的 Class 的最简单方法。
所以double.class
工作得很好。
当您只知道它的名称时,这是查找原始类型类的代码。
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;
}
}