Wpis z mikrobloga

#java | #programowanie | #mechanizmrefleksji | #refleksja

Dobra dzisiaj już raz pisałem to napiszę jeszcze raz.
Piszę projekcik na studia i stwierdziłem że jest fajna okazja żeby ogarnąć refleksję. Bo czemu nie.
No i sytuacja przedstawia się następnująco.

Mam taką ścieżkę dziedziczenia po klasach:
Creature -> Animal -> Wolf.

Powiedzmy że gdzieś w jakiejś klasie chcę utworzyć sobie nową instancję tego wilka z tym, że nie wiem o tym że to jest wilk.
Metoda wygląda tak:

public void addCreature(int x, int y, Creature c)
I tutaj trochę przeszukując stack'a wymodziłem coś takiego:

Creature newCreature = (Creature) Class.forName(c.getClass().getName()).getConstructor(c.getClass()).newInstance(x, y, this);
Akurat to ma być wywoływane w klasie World, dlatego jest 'this'.
Konstruktor wilka wygląda następująco (nie ma dodatkowych):

public Wolf(int x, int y, World world)
Wywołując kod który wkleiłem wyżej dostaję wyjątek że nie znalazł takiej metody:

java.lang.NoSuchMethodException: com.m.VirtualWorld.Animals.Player.(com.m.VirtualWorld.Animals.Player)
at java.lang.Class.getConstructor0(Class.java:3082)
at java.lang.Class.getConstructor(Class.java:1825)

I wyrzuca ten wyjątek właśnie przy Creature newCreature = ....;

Wszystko co googluję sprowadza właśnie do takiej postaci tworzenie nowych obiektów, dlatego strzelam że coś pomieszałem w argumentach dla metod .forName() albo .getConstructor();
Ktoś/coś jest w stanie podpowiedzieć?

#java #programowanie #refleksja
  • 22
@Wyrewolwerowanyrewolwer: Do nauki refleksji polecam pisanie pod minecrafta (spigot), w kilka miesięcy nauczyłem się refleksji, podstaw bytecode, sporej ilości zasad działania JVM, agnetów, edycji kodu w runtime, unsafe i kilku innych bezsensownych sztuczek, a to wszystko tylko po to by rozszerzyć podstawowe elementy ( ͡° ʖ̯ ͡°)
(to wyżej tak pół żartem, pół serio)

A tak patrząc na to co robisz, po 1 to co pisali: nie