Rom*_*man 5 java generics casting findbugs sonarqube
以下代码使用Sonar + FindBugs引发"未经检查/未确认的强制转换"严重违规:
1 public static <P extends ComponentContainer & AlignmentHandler> void addComponentAligned(P parent, Component child, Alignment alignment) {
2 parent.addComponent(child);
3 parent.setComponentAlignment(child, alignment);
4 }
Run Code Online (Sandbox Code Playgroud)
我应该如何避免这种违规?
编辑:违规行为在第3行
编辑:方法签名如下:ComponentContainer#addComponent(Component)AlignmentHandler #setComponentAlignment(Component,Alignment)
您的源代码中没有强制转换,但在编译产生的字节码中有.在字节码中,通用类型被擦除.擦除P是它的第一个约束,ComponentContainer.所以字节码(几乎)等于这个字节码:
public static void addComponentAligned(ComponentContainer parent, Component child, Alignment alignment) {
parent.addComponent(child);
((AlignmentHandler)parent).setComponentAlignment(child, alignment);
}
Run Code Online (Sandbox Code Playgroud)
Findbugs查看该字节码,并得出结论,转换为AlignmentHandler可能会失败,因为(就像findbugs看到的那样)该方法接受任何ComponentContainer.
这是一个findbugs的bug; 你应该打开一个错误报告.它看起来像是可以修复的东西而无需分析源代码.字节码还包含真实(通用)类型,findbugs应该使用它.
| 归档时间: |
|
| 查看次数: |
1910 次 |
| 最近记录: |