Do celów współpracy z Javą potrzebuję klasy, która ma zerowy konstruktor wykonujący inicjalizację. Obiekty tej klasy muszą mieć coś przypominającego zmienne pola java (tzn. Obiekt reprezentuje zaplecze gry i musi zachować stan gry).Dodaj konstruktora do klasy utworzonego typu deftype
deftype robi wszystko chcę zrobić wyjątkiem zapewnić sygnalnych konstruktora (ponieważ tworzę klasę z polami).
nie muszę pól być publicznie czytelny, więc mogę myśleć o 4 rozwiązania:
Korzystanie GEN-klasie; Nie chcę tego robić, jeśli mogę tego uniknąć.
Jakoś kodowanie prywatnych zmiennych członkowskich poza wiedzą o typie deftype; Powiedziano mi, że nie da się tego zrobić.
Zapisywanie zmodyfikowanego deftype, który również tworzy konstruktor nullary; szczerze mówiąc, nie znam się na tym wystarczająco dobrze.
Przenoszenie klasy stworzonej przez deftype i jakoś dodanie do niej nowego konstruktora.
Na koniec muszę mieć klasę Java, ponieważ będę przekazywał ją do kodu Java, który będzie robił nowy obiekt z klasy.
Czy któreś z rozwiązań, które zasugerowałem (lub o których nie myślałem), inne niż wykorzystanie klasy genowej jest wykonalne?
Wydaje się, że tworzenie konstruktora znajduje się głęboko w kodzie klienckim clojure. Więc modyfikowanie samego deftype brzmi trochę trudniej i nieco złym pomysłem. –
w jaki sposób pola będą dostępne, a instancja wygenerowała metodę yourClass.newInstance() i odbicie? TAK być może wiedząc więcej o użyciu strony Java dla wygenerowanej klasy, w przeciwnym razie trochę się boję, że czas na gen-klasę :( –