并非http://findbugs.sourceforge.net/bugDescriptions.html中的所有描述都清楚。当然,我可以研究实施,但如果有人比我更有经验,一些解释和例子会很棒。
Foo
不能进入Collection<String>
。bla(Foo f){hashtable.put(f);}
,其中''Foo'不可清除? FingBugs也“看到”了子类吗?foo(String s){if (s intenceof String) ...
这样的东西。这也是一个空检查,但这不是这里的测试...... volatile
,则JVM无法缓存该值。那是什么意思?答案 0 :(得分:7)
根据我的经验和测试,我可以在不咨询FindBugs源代码的情况下评论您提到的一些FindBugs描述。
UI_INHERITANCE_UNSAFE_GETRESOURCE:
如果您将this.getClass().getResource(...)
与相对URI一起使用,则该URI为
解决了this
的类。当一个子类存在于
不同的包,你得到一个子类的资源,你最终看
在不同的地方(相对于子类)。我知道一个类通过使用仅包含文件名的相对URI调用getResource()
来查找已知驻留在同一个包中的资源的示例。如果该类在哪里使用this.getClass()
而不是ClassName.class
,并且实际实例是子类,则找不到该资源。
BX_UNBOXED_AND_COERCED_FOR_TERNARY_OPERATOR:
这会讨论盒装数字类型,例如Integer
和Float
与原始数字类型相对,如int
和float
。对于
原语,你的期望是正确的:在boolean ? int : float
int
被强制为float
。但对于包装数字,一些东西
意外发生:在boolean ? Integer : Float
中,Integer
是
未装箱并强制执行float
。我本来期待的对象
没有改变,就像在
boolean ? (Number)Integer : Float
。
boolean b = Boolean.TRUE;
final Integer i = 123456789;
final Float f = 1.0f;
final Number x = b ? i : f;
System.out.println("wrapped coerced: " + x); // 1.23456792E8
final Number y = b ? (Number) i : f;
System.out.println("wrapped uncoerced: " + y); // 123456789
GC_UNRELATED_TYPES:FindBugs知道
关于一些可以的收集方法
不要像Java 1.5那样普及
Collection.contains(Object)
。这里,
参数必须是类型
Object
,因为否则存在
源代码可能会破坏。但任何对象
不是集合的类型是肯定的
不被包含,所以要求
在...中包含Integer
String
集合可能是一个
错误。
Collection<String> coll = new ArrayList<String>();
System.out.println(coll.contains(42));
HE_SIGNATURE_DECLARES_HASHING_OF_UNHASHABLE_CLASS:
NP_GUARANTEED_DEREF_ON_EXCEPTION_PATH:
SIO_SUPERFLUOUS_INSTANCEOF:?
NN_NAKED_NOTIFY:?
SP_SPIN_ON_FIELD:如果你旋转一个
JIT不是volatile
的字段
可以自由地优化代码(通过
将读出移出循环)
只要线程执行循环
产生相同的结果,没有
考虑到存在和
其他线程的动作。这就是为什么
有volatile
个关键字。我不知道这会导致一个错误。
STCAL_STATIC_CALENDAR_INSTANCE:?
WL_USING_GETCLASS_RATHER_THAN_CLASS_LITERAL:
在FindBugs示例中,该方法
在getClass()
上同步
访问其类的静态成员。
子类将同步
子类,所以超类和
子类可以进入
同步块同时因为它们在不同的监视器上同步,
导致竞争状况。
EQ_UNUSUAL:?
SF_SWITCH_FALLTHROUGH:这对我很有帮助
有时,因为我倾向于错过了
break
。有趣的是,在测试中
案件刚刚执行,我得到了除此之外
FindBugs给消息留言
SF_DEAD_STORE_DUE_TO_SWITCH_FALLTHROUGH。
TQ_EXPLICIT_UNKNOWN_SOURCE_VALUE_REACHES_ALWAYS_SINK: