2012-11-04 18 views
8

Enums są uważane za najlepszy sposób na singletons i jednym z powodów jest to, że domyślnie dziedziczy Serializable.Enums, Singleton i Deserialization

Ale w jaki sposób wyliczenie zapobiega problemowi z serializowaniem pojedynczych singli?

+0

Enum to singleton, ale jakie są problemy deserializacji singletonów? – clinton

+2

@ clinton: jeśli robisz singleton w wersji szeregowej i nie interesuje cię, jak to jest deserializowane, ty i twoja nowa instancja twojego singletona za każdym razem, gdy jest deserializowana, co łamie jej singleton. –

+0

@JBNizet dzięki za informacje. Nie zastanawiałem się wcześniej nad tym problemem dotyczącym singletonów. Lub może nie uderzyło mnie to jako ważne. – clinton

Odpowiedz

1

Serializacja jako argument przy używaniu enum dla singleton jest nonsensem.

Jeśli singiel enum jest stanowy, stan jest tracony podczas przekształcania do postaci szeregowej/deserializacji.

Jeśli singleton jest bezpaństwowcem, kogo obchodzi jego tożsamość?

+0

Jeśli singleton jest bezstanowy, a kod używa (na przykład) 'if (someVar == SomeSingleton.INSTANCE)', naprawdę zależy ci na jego tożsamości. –

+0

Nie ma przypadków użycia rzeczywistego świata. Jushua Bloc podniósł tę sprawę. Zwykle singleton NIE powinien być możliwy do serializacji, używanie enum do ułatwienia serializacji jest po prostu złe. Singleton to także strategia implementacji, a nie coś, co powinniśmy opublikować w interfejsie. – irreputable