调用正确的包装器

时间:2014-03-09 13:33:55

标签: 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()));
 ....

有没有办法只用一行来做?我必须检查每种原始类型。

1 个答案:

答案 0 :(得分:1)

使用表示基本类型的类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();
}
相关问题