Co powiecie na klasę, która bierze Collection<?>
, czyli dowolną kolekcję zupełnie dowolnych obiektów, i owija ją tak, żeby wyglądała jak Collection<T>
gdzie T
jest pewnym konkretnym typem (generycznym, rzecz jasna), do tego niekoniecznie występującym w pierwotnej kolekcji? Konwersja jest oczywiście dokonywana „w locie” i jest ekstremalnie niewydajna dla operacji innych niż iteracja ;) Klasa przyjmuje dwa generyczne parametry: typ „źródłowy” i typ „docelowy”; ignoruje wszystkie obiekty inne niż typu „źródłowego” a obiekty tegoż typu przerabia za pomocą obiektu pewnej klasy pomocniczej na obiekty typu „docelowego”.
Jeszcze muszę napisać wersję dla Map
.
Albo co powiecie na klasę Parameters
– poszerzone Properties
, która to klasa może przechowywać wartości dowolnych znanych jej typów dokonując dowolnej konwersji pomiędzy nimi, a ponadto może zarezerwować niektóre klucze do specjalnej walidacji? Na przykład: wstawiamy pod danym kluczem wartość jako Integer
a potem wyciągamy tą samą wartość spod tego samego klucza jako String
i dostajemy ładnie przerobioną liczbę w postaci ciągu znaków. Inny klucz rezerwujemy jako nasz specjalny i mówimy, że może przechowywać tylko liczby, do tego z określonego przedziału. Może nie wyląda na nic specjalnego, ale półtora dnia się głowiłem jak to zrobić, żeby było jako-tako elegancko :]
Czy to nie wygląda przerażająco?
public <T> void setValue(Class<? super T> ct, String key, T value) throws ParametersException;
public <T> T getValue(Class<? extends T> ct, String key, T ifNull) throws ParametersException;
Jestem z siebie dumny ;)