在Java中,如果您只知道一个基本类型的类对象';她叫什么名字?
对于基本类型:int、double、short等 鉴于:在Java中,如果您只知道一个基本类型的类对象';她叫什么名字?,java,Java,对于基本类型:int、double、short等 鉴于: String typeName = "double"; 如何获得double.class 对于普通课程,我们可以执行以下操作: String typeName = "java.lang.Integer" Class<?> clazz = Class.forName(typeName); // Class.forName(typeName) returns Double.class String typeName=“ja
String typeName = "double";
如何获得double.class
对于普通课程,我们可以执行以下操作:
String typeName = "java.lang.Integer"
Class<?> clazz = Class.forName(typeName);
// Class.forName(typeName) returns Double.class
String typeName=“java.lang.Integer”
Class clazz=Class.forName(typeName);
//forName(typeName)返回Double.Class
与其尝试一些聪明的东西,因为只有8个原语,不如编写一个switch/case语句,或者用其他方式对它们进行硬编码,比如Map(Scorpion在下面的评论中建议)
对于Class.forName的版本,采用这种方法。您不能这样做。看看这本书。转到“Class.forName()”部分,您可以在那里找到一个注释: 这不能用于基本类型
一个选项可能是创建一个方法,该方法将识别原语类型并返回匹配的类(即Integer.class、Double.class等)。如果单击@mprivat的链接并阅读“the.class Syntax”一节,一开始您会看到: 如果该类型可用,但没有实例,则该类型是可能的 通过在类型名称后附加“.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;
}
}
或者字符串到相应类的映射不要忘记将
void
作为第9个基本类。只是一个小小的修改:基本类型有.class
s:int.class
,double.class
,等等。您不必使用装箱对象类型的类。另外,double.class和double.class是完全不同的类(其他原语也是如此)。getPrimitiveClass
不是public
,因此您不能使用它。这没关系,但它不会找到原语类型的类,因为您只知道它的名称
s.getClass().getField(“sampleDouble”).getType()返回double.class-我想这意味着返回字段名为“sampleDouble”的基元类型的类。在任何其他情况下,如果您只需要一个基本类型的类,而不是特定于它的相关字段,Dennis Meng回答似乎是一个完美的解决方案。名称
应该是基本类型之一(例如“double”、“int”…),问题是如何获取该名称
的类
对象。auser的回答是不能用普通的方法(Class.forName()
)来实现,codebox的回答提供了一个很好的解决方法。