Mam następujący podpis klasy i ClientEventSourc
realizuje Serializable
:Zrozumienie FindBugs ostrzeżenie o polu serialVersionUID
public class Grid extends ClientEventSource implements Focusable, FramingBlockWrapper,LIMSEditableField
Teraz FindBugs wystawiasz to za sprytny:
Klasa jest Serializable, ale nie definiuje serialVersionUID
Ta klasa implementuje Serializowalny interfejs, ale nie definiuje pola serialVersionUID. Zmiana tak prosta, jak dodanie odwołania do obiektu a .class spowoduje dodanie do klasy pól syntetycznych, które zmienią niestety domyślny identyfikator serialVersionUID (np. Dodanie odwołania do klasy String.class spowoduje wygenerowanie pola statycznego klasa $ java $ lang $ String). Ponadto różne kompilatory kodu źródłowego do kodu bajtowego mogą wykorzystywać różne konwencje nazewnictwa dla zmiennych syntetycznych generowanych dla odwołań do obiektów klas lub klas wewnętrznych. Aby zapewnić zgodność operacyjną Serializable w różnych wersjach, należy rozważyć dodanie jawnego identyfikatora serialVersionUID z .
Czy ktoś może wyjaśnić, co to oznacza i jaki jest najlepszy sposób, aby to naprawić?
Czy istnieje algorytm/program generujący ten numer? Chodzi mi o to, czy może to być cokolwiek, czy musi przestrzegać pewnych najlepszych praktyk, jak to robi hashcode(), jak opisano w książce Effective java i zaimplementowane w EqualsBuilder i HashCodeBuilder ze wspólników Apache. – Geek
Ta liczba może być dowolna, o ile jest unikalna wśród klas zserializowanych. Eclipse f.e. ma swój własny generator, ale możesz użyć dowolnej liczby. – Kostronor