检查基元字段的类型

2022-08-31 17:42:45

我正在尝试确定对象上字段的类型。我不知道对象在传递给我时的类型,但我需要找到s的字段。区分盒装的s很容易,但基元似乎更困难。longLonglong

我可以确保传递给我的对象只有,而不是基元,但我宁愿没有。所以我拥有的是:Longs

for (Field f : o.getClass().getDeclaredFields()) {
    Class<?> clazz = f.getType();
    if (clazz.equals(Long.class)) {
        // found one -- I don't get here for primitive longs
    }
}

一种似乎有效的黑客方式是这样的:

for (Field f : o.getClass().getDeclaredFields()) {
    Class<?> clazz = f.getType();
    if (clazz.equals(Long.class) ||  clazz.getName().equals("long")) {
        // found one
    }
}

如果有一种更干净的方式,我真的想要一种更干净的方式来做到这一点。如果没有更好的方法,那么我认为要求我收到的对象只使用(而不是)将是一个更好的API。Longlong

有什么想法吗?


答案 1

你使用了错误的常量来检查长基元 - 使用,可以在包装器上找到具有类似名称的常量的彼此基元类型。例如:、、等。Long.TYPEByte.TYPECharacter.TYPE


答案 2
o.getClass().getField("fieldName").getType().isPrimitive();