Czy możemy serializować statyczną klasę wewnętrzną w Javie? Sama klasa jest tutaj zadeklarowana jako statyczna.Serializacja statycznej klasy wewnętrznej
Odpowiedz
Statyczna klasa wewnętrzna nie różni się od klasy najwyższego poziomu pod tym względem: może być serializowana, jeśli deklarowana jest implementacja Serializable
(lub jest podklasą klasy zadeklarowanej jako implementująca Serializable
). Podobnie jak w przypadku klas najwyższego poziomu, wszystkie obiekty napotkane podczas serializacji w czasie wykonywania muszą być przekształcane do postaci szeregowej, aby uniknąć NotSerializableException
. Ponieważ klasa wewnętrzna to static
, natura klasy zewnętrznej nie ma tu znaczenia.
Dziękuję wszystkim. Dostałem to, czego potrzebowałem od was, ludzie. – Tinkerbel
Wygląda na to, że odpowiedź może się różnić w zależności od wersji Java.
Spec serializacji w JDK 7 mówi:
Uwaga - serializacji klas wewnętrznych (tj zagnieżdżonych klas, które nie są statyczne klasy członek), w tym klas lokalnych i anonimowych, jest odradzane z kilku powodów. Ponieważ klasy wewnętrzne zadeklarowane w niestatycznych kontekstach zawierają niejawne nie-przejściowe odwołania do otaczających instancji klasy, serializacja takiej instancji klasy wewnętrznej spowoduje również serializację powiązanej z nią instancji klasy zewnętrznej. Pola syntetyczne generowane przez javac (lub inne kompilatory JavaTM) w celu implementacji klas wewnętrznych są zależne od implementacji i mogą się różnić między kompilatorami; różnice w takich polach mogą zakłócać kompatybilność, a także powodować konflikt domyślnych wartości serialVersionUID. Nazwy przypisane do lokalnych i anonimowych klas wewnętrznych są również zależne od implementacji i mogą się różnić między kompilatorami. Ponieważ klasy wewnętrzne nie mogą zadeklarować elementów statycznych innych niż stałe w czasie kompilacji, nie mogą używać mechanizmu serialPersistentFields do wyznaczania serializowalnych pól. Na koniec, ponieważ klasy wewnętrzne powiązane z instancjami zewnętrznymi nie mają konstruktorów o zerowym argumencie (konstruktorzy takich klas wewnętrznych domyślnie akceptują instancję otaczającą jako parametr z góry), nie mogą implementować funkcji Externalizable. Żaden z wyżej wymienionych problemów nie dotyczy klas statycznych członków.
oraz z serializacji seryjnej obiektów między wersjami Oracle i IBM JDK 1.7, mogę powiedzieć, że nie zawsze działa. Nie mogę powiedzieć na pewno, że zawsze zawodzi, ale na pewno nie można na nim liczyć.
Ścieżka kodowa, która nie zawodzi w mojej aplikacji, działała prawidłowo na JDK 1.5 przez 5 lat w produkcji i nie widzę żadnej z poprzednich wersji dokumentacji na temat serializacji przypominającej bieżące oświadczenie. Tak więc wydaje się, że bogowie Java nie dopuszcza do tego wzorca kodu w JDK 7.
Nie dotyczy to pytania, które określa ** statyczne ** klasy wewnętrzne. – gerardw
@Tinkerbel coś Uwaga -
Szeregowania statycznych klas zagnieżdżonych jest w porządku, ale kiedy (w przyszłości) jeśli statyczne klasy wewnętrzne są coraz przeniesiony do innej klasy zewnętrznej, a następnie serializowanie starych obiektów jest problemem.
Wszystkie pola są przypisane jako domyślne/puste.
Będzie pomocne, jeśli ktoś może wyjaśnić, dlaczego?Zauważyłem to, ale nie mam bardzo przekonującego powodu ... Brzmi to tak, jak tylko zmieni się pakiet, tak powinno się stać – user2674407
- 1. Nie można zaimportować statycznej klasy wewnętrznej statycznej?
- 2. Obejście dostęp non-statycznej metody członek od statycznej klasy wewnętrznej
- 3. Serializacja klasy STL
- 4. testowanie klasy wewnętrznej
- 5. Uzyskiwanie MethodInfo statycznej metody klasy statycznej
- 6. Serializacja Java dla rozszerzonej klasy
- 7. Metody rozszerzeń klasy statycznej?
- 8. Błąd pompowania widoku klasy wewnętrznej
- 9. Sesja hibernacji wewnątrz klasy wewnętrznej
- 10. Jak uzyskać dostęp do statycznej wewnętrznej klasy Java za pośrednictwem interakcji Clojure?
- 11. Używać klasy statycznej według interfejsu?
- 12. Serializacja zmiennej klasy, która nie implementuje serializacji
- 13. Dynamicznie dziedziczy z klasy wewnętrznej przez odbicie
- 14. Niedokonana definicja funkcji wyspecjalizowanego szablonu klasy wewnętrznej?
- 15. Metoda wewnętrzna: definicja klasy wewnętrznej i zewnętrznej
- 16. Java vs Groovy wewnętrznej/zewnętrznej klasy rozbieżności
- 17. Używanie Java klasy wewnętrznej i tworzenie instancji
- 18. scala: porównaj typy obiektów klasy wewnętrznej
- 19. Jak stworzyć wiosenną fasolę klasy wewnętrznej?
- 20. Pobierz obiekt klasy zewnętrznej z obiektu klasy wewnętrznej.
- 21. Dostęp do klasy zewnętrznej "super" z klasy wewnętrznej w Javie
- 22. Zwróć wskaźnik do zagnieżdżonej klasy wewnętrznej z ogólnej klasy zewnętrznej
- 23. Java - Konstruktor klasy wewnętrznej - dozwolona tylko dla klasy zewnętrznej
- 24. Poprawna składnia dla iteratora odwzorowania klasy wewnętrznej klasy szablonu?
- 25. W języku Java są typami wyliczeń wewnątrz klasy statycznej?
- 26. Dlaczego typ funkcji statycznej klasy statycznej nie może zostać wyprowadzony w zasięgu klasy?
- 27. Dlaczego możemy mieć statyczne końcowe elementy, ale nie możemy mieć statycznej metody w wewnętrznej klasie?
- 28. instancji zagnieżdżonych klasy statycznej przy użyciu Class.forName
- 29. TypeScript: dostęp do statycznej metody klasy
- 30. Dostęp do zmiennej statycznej z innej klasy
Cóż, co się stanie, gdy ... spróbujesz? –
Moja aplikacja działa poprawnie, gdy to robię. Ale, aby tak się stało, dokonuję serializacji klas wewnętrznych i zewnętrznych, co nie jest mi potrzebne, ale znam pojęcie, jeśli klasa wewnętrzna jest seryjna, to zewnętrzna musi być poddana szeregowaniu. A także, mam pewne wątpliwości w statycznych klasach można serializować, czy też nie. – Tinkerbel
Zewnętrzna klasa nie ma nic wspólnego z serializacją _statycznej_ klasy wewnętrznej. –