我想对我的getClass().getField(...).set(...)
进行安全检查,其中我设置的值应该与该字段的类型匹配(int x = 1应该只允许设置Integers)。问题是,我很难找到比较两者的方法。目前,这是代码:
int foo = 14;
Field field = getClass().getDeclaredField("foo");
Object source = this;
// make the field accessible...
public void safeSet(Object newValue) throws IllegalAccessException {
// compare the field.getType() to the newValue type
field.set(source, newValue);
}
我尝试了很多事情,并在网络上搜索了很多内容,但是找不到仅专注于此用法的答案。我尝试了诸如field.getType().getClass().equals(newValue.getClass())
,field.getType().equals(newValue)
之类的操作,但它们无法正常工作。如何合理地将原始field.getType()与传入的Object值进行比较,或者在这种情况下,如何将int
与Integer
进行比较?
答案 0 :(得分:3)
由于要为字段分配值,因此这是内置的解决方案。
if (getClass().getDeclaredField("foo").getType().isAssignableFrom(newValue.getClass())) {
....
}
它也适用于原始类型。
答案 1 :(得分:2)
第1步:
选中MouseArea {
anchors.fill: parent
cursorShape: Qt.PointingHandCursor
onClicked: {
root.current = !root.current;
if(root.parent.currentItem !== null) {
if(root.parent.currentItem !== root)
root.parent.currentItem.current = false;
}
root.parent.currentItem = root;
}
}
。如果返回true,则为原始类型。并继续执行步骤3。
步骤2:
如果不是原始的,则可以直接检查
field.isPrimitive()
,然后设置值
步骤3: 如果是原始的,那么您需要一张静态地图
field.getType() == newValue.getClass()