Witam,
chciałbym zrobić narzędzie które bedzie wymuszało od programisty tworzenie obiektów tylko serializowanych (funkcje sprawdzajacą czy obiekt/klasa jest serializowana mam zrobioną).
Jak to zrobic np. żeby sprawdzanie wykonywało się na etapie kompilacji?
Narzedzie do sprawdzania obiektu w czasie kompilacji
- Rejestracja: dni
- Ostatnio: dni
- Postów: 178
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Bieszczady
- Rejestracja: dni
- Ostatnio: dni
- Postów: 178
Bardziej chodziło mi to czy jest możliwośc, żeby dało się tworzyć tylko takie klasy które sa serializowane ?
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Space: the final frontier
- Postów: 26433
- To klasy czy obiekty?
- Generalnie nie. Byłoby to zresztą bez sensu.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 3760
Zależy.
Zbytniego sensu nie widzę w wymuszeniu serializowalności klas ale:
- Jak projekt jest budowany w mavenie to można napisać własny plugin.
- Można też dopisać plugin do IDE, z którego korzystasz.
Ciągle jednak jest pytanie: po co?
- Rejestracja: dni
- Ostatnio: dni
- Postów: 178
Ponieważ u mnie w projekscie wszytskie akcje i ich atrybuty musza byc serializowane i chciałbym jakoś wymusić na pozniejszych deweloperach przymus tworzenia tylko klas serializowanych.
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Space: the final frontier
- Postów: 26433
To czemu nie zrobisz bazowych klas dla tych akcji i ich atrybutów które będą serializowalne a wszystko będzie musiało z nich dziedziczyć? Wystatrczy że w swoim API przyjmujesz jako parametry AbtractAction i AbstractAttribute. Bo rozumiem że to wymuszenie wynika z tego że twoje API polega na tej serializowalności.
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Stacktrace
- Postów: 6823
Wszystko się da. Potrzebujesz napisać własne narzędzie do instrumentacji kodu w czasie kompilacji, które zamiast manipulować bytecodem będzie tylko sprawdzać czy np. klasa implementuje odpowiedni interfejs https://theholyjava.wordpress.com/2010/06/25/implementing-build-time-instrumentation-with-javassist/
- Rejestracja: dni
- Ostatnio: dni
- Postów: 957
Klasy abstrakcyjne czy interfejsy to najlepsza opcja.
Ale jeśli już musisz to takie rzeczy powinny być wymuszane przez style guide czy inne wytyczne, a nie kompilacje, bo nie do tego ona służy. Dobrym miejscem na wymuszenie tego typu reguł jest jakiś plugin do jenkinsa czy czego tam używacie. Jest też np. SonarQube to analizowania poprawności kodu, nie robiłem tego, ale pewnie można dopisywać własne pluginy.
Z ciekawości: wszystkie klasy, te utilsowe czy pomocnicze też muszą być serializowalne?
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Space: the final frontier
- Postów: 26433
@janiu mozesz powiedzieć czemu masz takie dziwne wymaganie? Bo ja rozumiem że pewne klasy muszą spełniać ten warunek ze względu na API w którym używasz tych obiektów i tam możesz to wymusić interfejsem, ale pozostałe klasy po co miałyby spełniać taki warunek? Cchesz zrzucać cały stan aplikacji na dysk?