我有一个由FindBugs报告的错误,但我知道更好:)请参阅以下示例:
public class MyClass extends BaseClass {
@CustomInjection
private Object someField;
public MyClass() {
super();
someField.someMethod(); // Bug is here because FindsBugs thinks this is always null
}
}
Run Code Online (Sandbox Code Playgroud)
在我的BaseClass构造函数中,我使用正确的对象注入带有@CustomInjection批注的所有字段,因此我的注释字段在我的情况下不为空.
我不想用'suppresswarnings'来抑制警告,因为这会使代码混乱很多.我宁愿做像FindBugs这样一个过滤器解释在这里,但我无法弄清楚如何筛选具有一定的界面注释字段错误.我也不想过滤所有空错误警告.我认为应该是这样的:
<Match>
<Bug code="UR">
<Field annotation="CustomInjection">
</Match>
Run Code Online (Sandbox Code Playgroud) 当我有一个没有 javadoc 的公共方法时,Checkstyle 会发出警告,这很好!当我覆盖一个公共方法时,我没有收到警告,因为 javadoc 在该方法的父类中已经可用。
例如,现在我的方法有另一个注释@MyEvent。现在我确实收到了警告但不想要它,因为注释说得够多了。我可以排除带有特定注释的方法的警告吗?
有一些解决方案涉及在我的代码中添加类似@SuppressWarnings或注释之类的东西,// CHECKSTYLE.OFF但这并没有使我的代码更好,我可以改为添加 javadoc。所以我正在寻找配置级解决方案。
在我的代码中,我有类似以下内容:
检票口形式:
public class MyForm extends Form<MyFormModel> {
public MyForm(String id){
super(id, new CompoundPropertyModel<MyFormModel>(new MyFormModel())
//add some labels from the CompoundPropertyModel
}
@Override
protected void onSubmit() {
setResponsePage(new NewPage(getModelObject()));
}
}
Run Code Online (Sandbox Code Playgroud)
表单模型:
public class MyFormModel extends LoadableDetachableModel<List<NotSerializableObject>> {
transient List<NotSerializableObject> list;
//Some labels with getters and setters for CompoundPropertyModel use
protected List<NotSerializableObject> load() {
//list = dbstuff.getstuff()
}
}
Run Code Online (Sandbox Code Playgroud)
当页面加载MyForm时,MyFormModel使用该load()函数并尝试在提交表单之前访问数据库.我不明白为什么因为getModelObject()在提交表单并被调用之前不会onSubmit()被调用.
我知道应该拆分CompoundPropertyModel和LoadableDetachableModel来解决这个问题,但为什么这不起作用?为什么以及从哪里调用load()函数?
谢谢你的帮助,
马丁