ソナーからのエラーメッセージの.class
リテラルを使用し、そうしたいですクラスパスのルートを参照します。 ...しかし、ソナーは、リソース文字列であるかどうか確認しない場合があります、そしてそれは、パスが相対パスであるかもしれないと仮定します
あなたはスラッシュなしで文字列を書いていた何が起こるか想像:
URL url = getClass().getResource("myWonderfulResource.txt");
URLは現在のパッケージのmyWonderfulResource.txt
を指していました。ここで、クラスを別のパッケージに拡張したとします。 Awesome
のインスタンスは素晴らしいテキストファイルを取得しようとすると
package com.example;
public class Wonderous {...}
package com.example.awesome;
public class Awesome extends Wonderous {...}
は、それは、COM /例では、クラスパスに/素晴らしい、それを検索します。しかしWonderful
のリソースはcom/example
にあります。 Awesome
が見つかりません。
ところで、このエラー報告にはFindBugsのから来て、そしてこの特定のバグのdocumentationは次のとおりです。
UI:クラスが拡張されている場合のgetResourceの使用法は安全でない可能性がある(UI_INHERITANCE_UNSAFE_GETRESOURCE)
これを呼び出します。このクラスが別のパッケージのクラスによって拡張されている場合、getClass()。getResource(...)は期待された以外の結果を与える可能性があります。
これは、私たちの特定の状況で問題を解決したため、これを受け入れられた回答としてフラグを付けました。しかし、あなたのクラスを最終的なものとして設定したくない場合は、以下をお読みください。 –