Sonar已经注意到这是一个臭臭的代码。我怎么能解决它?
invokeFieldAccessor(property.getField(), this.instance, theValue,
new FieldAccessorHandler() {
@Override
public synchronized Object accessField(
final Field field, final Object objectInstance,
final Object value) {
try {
field.set(objectInstance, value);
} catch (Exception e) {
return null;
}
return null;
}
});
编辑:所需的输出是返回null 有或没有异常
答案 0 :(得分:3)
只需从catch
try {
// ...
} catch (Exception e) {
// Fall through to the return afterwards...
}
return null;
但我建议用Exception
做 nothing 是一个非常糟糕的主意。
不建议抓住Exception
:你应该抓住ReflectiveOperationException
。
答案 1 :(得分:0)
您可以使用implementation 'org.jsoup:jsoup:1.10.2'
来执行此操作。
Document document = Jsoup.parse(content);
Element element = document.body();
setElement(element);
Utils.appendView(this,getElement().children());
invalidate();
答案 2 :(得分:0)
无论try / catch块的结果如何,都返回null。这个“臭”的原因是catch块中有一个返回null,而try块没有。
这里可能存在一个错误。
new FieldAccessorHandler() {
@Override
public synchronized Object accessField(
final Field field, final Object objectInstance,
final Object value) {
try {
field.set(objectInstance, value);
//Why is nothing being returned here?
} catch (Exception e) {
return null;
}
return null;
}
});
从此代码中可见的内容,此方法应为void方法。它设置了一个值,而不是读取一个值,这就是为什么你默认返回null的原因。
所以你可能正在实现错误的接口,或者,如果你必须返回一个值,只能在try / catch之后发送null
:
new FieldAccessorHandler() {
@Override
public synchronized Object accessField(
final Field field, final Object objectInstance,
final Object value) {
try {
field.set(objectInstance, value);
} catch (Exception e) {
logger.error(e); //log the exception
}
return null;
}
});
答案 3 :(得分:0)
在catch子句中,您应该记录异常或重新抛出它。您的实现只是隐藏它。除此之外,返回空值不是最好的方法。
答案 4 :(得分:0)
这样做:
invokeFieldAccessor(property.getField(), this.instance, theValue,
new FieldAccessorHandler() {
@Override
public synchronized void accessField(
final Field field, final Object objectInstance,
final Object value) {
try {
field.set(objectInstance, value);
} catch (Exception e) {
e.printStackTrace();
}
}
});