在Java中,如果您只知道一个基本类型的类对象';她叫什么名字?

在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

对于基本类型: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=“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的回答提供了一个很好的解决方法。