Findbug正在为一行显示NP_NULL_ON_SOME_PATH。
它说有一个语句分支,如果执行,它保证null值将被取消引用,这将在代码执行时生成一个NullPointerException。
当然,问题可能是分支或语句不可行,null指针异常永远无法执行;决定这超出了FindBugs的能力。
这里是代码:
public int compare(Object o1, Object o2)
{
....
String sTypeName1 = row1.getFieldValue(OBJECT_TYPE_FIELD_NAME);
String sTypeName2 = row2.getFieldValue(OBJECT_TYPE_FIELD_NAME);
if (sTypeName1!= null && sTypeName1.indexOf("~") != -1)
{
sTypeName1 = m_oc.getString(sTypeName1);
}
if (sTypeName2!= null && sTypeName2.indexOf("~") != -1)
{
sTypeName2 = m_oc.getString(sTypeName2);
}
int cf = sTypeName1.compareTo(sTypeName2);
if (cf == 0)
{
cf = o1.toString().compareTo(o2.toString());
}
return cf;
}它显示了代码的两个相同类型的错误:
int cf = sTypeName1.compareTo(sTypeName2);这里说,从sTypeName1加载的值中有一个可能的空指针取消引用。
因此,我不得不在这段代码之前放置一个null检查,例如:
if(sTypeName1 != null && sTypeName2 != null)
{
int cf = sTypeName1.compareTo(sTypeName2);
}但这个问题没有得到解决。:(
有人能提出解决办法吗?我的方法又有什么问题?
非常感谢你仔细研究了我的问题:)
发布于 2015-06-03 10:23:01
对我来说,这个问题已经解决了。此代码不生成错误报告:
String sTypeName1 = row1.getFieldValue("qqq");
String sTypeName2 = row2.getFieldValue("www");
if (sTypeName1 != null && sTypeName1.indexOf("~") != -1) {
sTypeName1 = m_oc.getString(sTypeName1);
}
if (sTypeName2 != null && sTypeName2.indexOf("~") != -1) {
sTypeName2 = m_oc.getString(sTypeName2);
}
int cf = 0;
if (sTypeName1 != null && sTypeName2 != null) {
cf = sTypeName1.compareTo(sTypeName2);
}
if (cf == 0) {
cf = o1.toString().compareTo(o2.toString());
}
return cf;可能您没有重新编译您的代码,或者没有再次执行FindBugs分析。
发布于 2021-12-17 01:07:26
根据我的经验,这可能是由这样的情况造成的:
如果只在某些条件下设置 b ,例如如果a为非空,则稍后引用b。如果a可能真的为null,则需要处理如果b也为null时该做什么。如果a从未为空,则删除空检查。而且,对我来说,它将b定义为第一个有问题的行的行,而不是何时调用。
if (a != null) {
b = a.getB();
}
b.doSomething();情况2-您在一个地方检查空,而不是在另一个地方检查。到处都是空中楼阁,或者哪里都没有
if (x != null) {
x.doSomething1();
}
x.doSomething2();https://stackoverflow.com/questions/30597368
复制相似问题