代码之家  ›  专栏  ›  技术社区  ›  Eko

调用正确的包装器

  •  0
  • Eko  · 技术社区  · 11 年前

    我正在制作一个程序,允许你用一个窗口安装一个类。所以有字段,当我想转换成好的类型时,我会这样做:

    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 回复  |  直到 11 年前
        1
  •  1
  •   Braj    11 年前

    使用表示基元类型的类TYPE 每个原语包装器类都包含静态TYPE静态字段

    例如Integer类contais

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

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

    尝试以下代码:

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