komunikat o błędzie z Sonar nie wydaje sensu, ponieważ zasób rozpoczyna się ukośnikiem, a więc znajduje się w katalogu głównym ścieżki zajęć. Jednak Sonar nie może sprawdzić, co jest w ciągu zasobów, a zostanie on zakładać, ścieżka może być ścieżką względną ..
Wyobraź sobie, co by się stało, gdybyś napisał ciąg bez ukośnika:
URL url = getClass().getResource("myWonderfulResource.txt");
Adres URL wskazywałby na myWonderfulResource.txt
w bieżącym pakiecie. Załóżmy teraz, że rozszerzyłeś klasę w innej paczce.
package com.example;
public class Wonderous {...}
package com.example.awesome;
public class Awesome extends Wonderous {...}
Kiedy instancją Awesome
próbuje uzyskać wspaniały plik tekstowy, wygląda go na ścieżce klasy COM/przykład/niesamowite. Ale zasób Wonderful
jest w com/example
. Awesome
nie znajdzie.
Nawiasem mówiąc, ten raport o błędach pochodzi z FindBugs i documentation dla tego konkretnego błędu jest:
UI: Wykorzystanie getResource może być niebezpieczne, jeśli klasa jest przedłużony (UI_INHERITANCE_UNSAFE_GETRESOURCE)
Wywołanie tego. getClass(). getResource (...) może dać wyniki inne niż oczekiwane, jeśli klasa ta zostanie rozszerzona o klasę w innym pakiecie.
Oznaczono jako zaakceptowaną odpowiedź, ponieważ rozwiązało to problem w naszej konkretnej sytuacji. Jednak jeśli nie chcesz/możesz ustawić swoją klasę jako ostateczną przeczytaj poniżej ... –