我正在编写一个程序,允许您使用窗口实现类。所以有字段,当我想转换为好的类型时,我喜欢这样:
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()));
....
有没有办法只用一行来做?我必须检查每种原始类型。
答案 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();
}