java - 调用正确的包装器

标签 java wrapper

我正在制作一个程序,允许您用窗口实例化一个类。所以有字段,当我想转换为好的类型时,我会这样做:

if (f.getType() == int.class)
                           m.invoke(res, Integer.parseInt(f.getText()));

                    else if (f.getType() == double.class)
                        m.invoke(res, Double.parseDouble(f.getText()));
                    else if (f.getType() == boolean.class)
                        m.invoke(res, Boolean.parseBoolean(f.getText()));
 ....

有没有一种方法可以只用一行来完成?否则我必须检查每个原始类型。

最佳答案

使用Class TYPE表示原始类型 每个Primitive Wrapper类都包含静态TYPE静态字段

例如整数类包含

public static final Class<Integer>  TYPE = (Class<Integer>) Class.getPrimitiveClass("int");

试试这个代码:

     if (f.getType() == Integer.TYPE)
            m.invoke(res, Integer.parseInt(f.getText()));
     else if (f.getType() == Double.TYPE)
         m.invoke(res, Double.parseDouble(f.getText()));
     else if (f.getType() == Boolean.TYPE)
         m.invoke(res, Boolean.parseBoolean(f.getText()));
     ...
<小时/>

或者您可以使用 TYPE 类的 name() 方法

试试这个代码:

     if (f.getType().getName().equals(int.class.getName()))
            m.invoke(res, Integer.parseInt(f.getText()));
     else if (f.getType().getName().equals(double.class.getName()))
         m.invoke(res, Double.parseDouble(f.getText()));
     else if (f.getType().getName().equals(boolean.class.getName()))
         m.invoke(res, Boolean.parseBoolean(f.getText()));
    ....
<小时/>

或者使用此代码在单行中完成

convert(f.getType(),f.getText());


import java.beans.PropertyEditor;
import java.beans.PropertyEditorManager;

private Object convert(Class<?> targetType, String text) {
    PropertyEditor editor = PropertyEditorManager.findEditor(targetType);
    editor.setAsText(text);
    return editor.getValue();
}

关于java - 调用正确的包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22282843/

相关文章:

javascript - JS 库的 Angular 包装器不加载样式

java - 从java中的字符串中找到第一个唯一字符

java - 无法解决线程 "AWT-EventQueue-0"java.lang.NullPointerException 中的异常

java - 我们也有包装类的对象池吗?

java - 包装类RAM

c++ - 为面向对象的 C++ 代码开发 C 包装 API

java - 将 String 中的时间列表 (7 :08 AM, 10:03 AM) 与 Android/Java 中的当前本地时间进行比较

java - 在 JFrame Java 上在图像上方追踪一条线

java - JSONValue 的问题

c++ - 如何解析包装器代码中的 "Invalid use of incomplete type"?