比较对象与原始类型

时间:2019-01-02 07:05:02

标签: java reflection types primitive

我想对我的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值进行比较,或者在这种情况下,如何将intInteger进行比较?

2 个答案:

答案 0 :(得分:3)

您的朋友是Class.isAssignableFrom()

由于要为字段分配值,因此这是内置的解决方案。

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