java - 反射:使用 Number 作为基元的包装器来调用方法

标签 java reflection primitive-types

我的任务是使用带有必要信息的字符串来调用 java.lang.Math 的方法。由于只有使用原始数字类型的方法,因此我使用 Number 作为包装器,然后它获取从 String 解析的值。

Number value = null;
    switch (attributClass) {
        [...]//parse the attribute into "value"
    }
Method m = null;
try{
    m = Class.forName("java.lang.Math").getDeclaredMethod(mName, value.getClass());
...

现在我的问题是出现以下异常:

java.lang.NoSuchMethodException: java.lang.Math.acos(java.lang.Double) at java.lang.Class.getDeclaredMethod(Unknown Source)

我想发生这种情况是因为 Double 不是原始类型 double,但是有什么方法可以从 Number 中获取原始类型吗?

最佳答案

据我所知,没有将包装类转换为原始类的标准方法,反之亦然。

获取包装类的原始类的一种巧妙方法是 wrapperClass.getDeclaredField("TYPE").get(null) (因为每个包装器都定义了这样一个字段)。如果您不想这样做,您可以创建 Map<Class, Class>从包装器映射到基元,并用 8 种基元类型及其各自的包装器填充它。

关于java - 反射:使用 Number 作为基元的包装器来调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21356817/

相关文章:

java - 为什么 Java 在通过反射调用不装箱的方法时不支持访问原始返回值?

java ->> [Java] 的原始提升

java - 在 Eclipse 中运行单元测试时发现 AbstractMethodError,而不是在 Cygwin 中运行时发现

java - 确定 Java 应用程序是否为恶意软件

java - 在测试中使用 Spring 上下文启动 Jetty

c# - 有没有办法交替使用 ParameterInfo 和 PropertyInfo?

c# - 在 C# 中,我如何评估一个类的任何成员是否包含 switch case 或 if else 构造?

java - 比较 Java 和 Jython 类型时的奇怪行为

java - 单击注销按钮终止 session 并重定向到登录页面

c++ - 从参数创建变量名