Java 调用合适的包装器

Java 调用合适的包装器,java,wrapper,Java,Wrapper,我正在做一个程序,允许你用一个窗口来实例化一个类。所以有一些字段,当我想转换成好的类型时,我会这样做: if (f.getType() == int.class) m.invoke(res, Integer.parseInt(f.getText())); else if (f.getType() == double.class) m.invoke(res

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

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

有没有办法只用一行就可以做到?否则,我必须检查每个基元类型。

使用表示基元类型的类类型 每个基本包装类都包含静态类型静态字段

例如,整数类contais

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

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

请尝试以下代码:

     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()));
     ...
     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();
}
convert(f.getType(),f.getText());
导入java.beans.PropertyEditor;
导入java.beans.PropertyEditorManager;
私有对象转换(类targetType,字符串文本){
PropertyEditor编辑器=PropertyEditorManager.findEditor(targetType);
编辑器.setAsText(文本);
返回editor.getValue();
}

可能重复的@Eko想问“这么说没有办法只用一行吗?我必须检查每个基本类型?”+1这个问题。你应该扩展你的答案,包括解释。所以没有办法只用一行吗?我必须检查每一个基本类型?我已经更新了我的代码。使用
属性编辑器
类。请试一试。按照您的要求更新您的问题“所以没有办法只使用一行?我必须检查每个基本类型”以使其不重复问题。很好,除了字符串和字符外,它工作正常。但对于其他每一种primitiv类型,它都有效