我很可能在这个微不足道的用例中忽略了一些东西。我的代码迭代类中的带注释的字段,对于每个字段,我想运行一些依赖于类型的代码。最简单的方法就是设置一个值:
field.setAccessible(true);
final Class<?> type = field.getType();
if (type.equals(Boolean.class)) {
field.set(this, Boolean.parseBoolean(property));
} else if (type.equals(Integer.class)) {
field.set(this, Integer.parseInt(property));
} else if (type.equals(String.class)) {
field.set(this, property);
} else {
LOGGER.warn("Cannot parse property -{}{}. Unknown type defined.", option.getOpt(),
field.getName());
}
但是这个检查:
if (type.equals(Boolean.class))
不能像预期的那样工作,例如对于定义为private boolean isVerbose;
的字段。在检查了type
之后,我得到了属性name
仅仅是"boolean"
,其中Boolean.class
属性name
被"java.lang.Boolean"
填充。这些对象是不同的
这个场景的正确实现是什么?
看看这篇文章:检查原语字段的类型
基本上你需要单独检查基本类型(Boolean.TYPE
, Long.TYPE
等)
if (field.getType().equals(Boolean.TYPE) {
// do something if field is boolean
}
我相信您在java原语和装箱方面遇到了麻烦。boolean是一个类,其中"boolean"仅表示基本类型。
是否声明是不同的:
private boolean myBool; // this a java primitive
private Boolean myOtherBool; // this is an object
Java根据需要自动在这些类型之间进行转换,但是当您自己检查类型时,您必须注意这一点。
同样适用于:——整数——长——短字节的
我希望我没有忘记什么。
在Java中,boolean
和Boolean
是两种不同的类型:boolean
是原始数据类型,而Boolean
是java.lang.Boolean
中的一个类。在这个例子中,在你的类中,你使用的是private boolean isVerbose
,而不是java.lang.Boolean
类型。因此,您必须将其更改为private Boolean isVerbose
。希望这对你有所帮助!!!!!!