Die Fehlermeldung von Sonar nicht verwenden scheinen viel Sinn zu machen, da die Ressource mit einem Schrägstrich beginnt, und so wird im Stammverzeichnis des Klassenpfads nachgeschlagen. Allerdings Sonar möglicherweise nicht überprüfen, was in dem Ressource-String ist, und es wird dann der Pfad annehmen könnte ein relativer Pfad sein ..
Stellen Sie sich vor, was Sie eine Zeichenfolge ohne einen Schrägstrich geschrieben würde geschehen hat:
URL url = getClass().getResource("myWonderfulResource.txt");
Die URL würde im aktuellen Paket auf myWonderfulResource.txt
zeigen. Angenommen, Sie haben die Klasse in einem anderen Paket erweitert.
package com.example;
public class Wonderous {...}
package com.example.awesome;
public class Awesome extends Wonderous {...}
Wenn eine Instanz von Awesome
versucht, die wunderbaren Textdatei zu erhalten, sieht es auf dem Klassenpfad in com/example nach oben/genial. Aber Wonderful
's Ressource ist in com/example
. Awesome
wird es nicht finden.
übrigens dieser Fehlerbericht kommt aus FindBugs und die documentation für diesen speziellen Fehler ist:
UI: Verwendung von GetResource unsicher sein kann, wenn Klasse erweitert wird (UI_INHERITANCE_UNSAFE_GETRESOURCE)
diesen Aufruf. getClass(). getResource (...) könnte andere als erwartete Ergebnisse liefern, wenn diese Klasse um eine Klasse in einem anderen Paket erweitert wird.
Dies wurde als akzeptierte Antwort markiert, weil das das Problem in unserer speziellen Situation löste. Wenn Sie Ihre Klasse jedoch nicht als final festlegen möchten, lesen Sie weiter unten ... –