次のコードでは、ソナー+ FindBugsのを使用して「チェックなし/未確認キャスト」の重要な違反を発生させますか?未確認/未確認キャスト
EDIT:違反がライン上にある3
EDIT:メソッドのシグネチャは、次のとおりです。 ComponentContainer#addComponentを(コンポーネント) AlignmentHandler#setComponentAlignment(コンポーネント、アライメント)
次のコードでは、ソナー+ FindBugsのを使用して「チェックなし/未確認キャスト」の重要な違反を発生させますか?未確認/未確認キャスト
EDIT:違反がライン上にある3
EDIT:メソッドのシグネチャは、次のとおりです。 ComponentContainer#addComponentを(コンポーネント) AlignmentHandler#setComponentAlignment(コンポーネント、アライメント)
ソースコードにはキャストは、ありませんコンパイルの結果として生成されたバイトコードには存在します。バイトコードでは、ジェネリック型は消去されます。 P
の消去は、最初の境界であるComponentContainer
です。だから、バイトコードは(ほとんど)本のバイトコードと同等です:
public static void addComponentAligned(ComponentContainer parent, Component child, Alignment alignment) {
parent.addComponent(child);
((AlignmentHandler)parent).setComponentAlignment(child, alignment);
}
FindBugsのはそのバイトコードを見て、この方法は、任意のComponentContainerを受け付ける(限りFindBugsのは、見ていると)ので、AlignmentHandlerへのキャストが失敗する可能性がありますと結論します。
これはfindbugsのバグです。バグレポートを開くべきです。ソースコードを解析することなく修正できるようなものが私には見えます。バイトコードには実際の(ジェネリック)タイプも含まれており、findbugはそれを使用する必要があります。
実際にJavaで複数の継承を試行しながら使用する方法はありますか? – BlackVegetable
不完全です。どのステートメントがエラーの原因となるのでしょうか? 'addComponent()'と 'setComponentAligment()'の定義も表示してください。私たちは読者ではありません。 –
@BlackVegetable:複数のインタフェース継承、はい。 –