2012-07-02 20 views
5

次のコードでは、ソナー+ FindBugsのを使用して「チェックなし/未確認キャスト」の重要な違反を発生させますか?未確認/未確認キャスト

EDIT:違反がライン上にある3

EDIT:メソッドのシグネチャは、次のとおりです。 ComponentContainer#addComponentを(コンポーネント) AlignmentHandler#setComponentAlignment(コンポーネント、アライメント)

+0

実際にJavaで複数の継承を試行しながら使用する方法はありますか? – BlackVegetable

+1

不完全です。どのステートメントがエラーの原因となるのでしょうか? 'addComponent()'と 'setComponentAligment()'の定義も表示してください。私たちは読者ではありません。 –

+0

@BlackVegetable:複数のインタフェース継承、はい。 –

答えて

5

ソースコードにはキャストは、ありませんコンパイルの結果として生成されたバイトコードには存在します。バイトコードでは、ジェネリック型は消去されます。 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はそれを使用する必要があります。

関連する問題