我正在编写一个模拟类,它可以使用反射(我没有找到反射)根据其类型设置字段值。然后我意识到一个有趣的现象:
public void play(Class c)
throws NoSuchMethodException, IllegalAccessException,
InvocationTargetException, InstantiationException {
Constructor declaredConstructor = c.getDeclaredConstructor();
Object o = declaredConstructor.newInstance();
Field[] fields = c.getDeclaredFields();
for (Field f : fields) {
String name = f.getName();
Class<?> type = f.getType();
switch (type) { // switch block
case String.class:
break;
default:
break;
}
if (type.equals(String.class)) { // if block
f.set(o, name);
} else if (type.equals(Integer.class)) {
f.set(o, nextInteger());
}
}
}
``` `switch` 块给出错误:
不兼容的类型。找到java.lang.class<capture<?>>,必需的字符、字节、短字符、int、字符、字节、短字符、整数、字符串或枚举'
但是 `if` block按预期工作。我想区别在于开关的工作原理是 `==` 如果有 `equals` . 是否可以使用 `switch` ?
暂无答案!
目前还没有任何答案,快来回答吧!