Jakej problém? Normální volání funkce přes ukazatel. pokud nepočítám deklaraci a implementaci funkce, je to jeden parametr u volající funkce navíc. Nebo to můžu udělat pomocí enumu a tabulky, ale tam přibude tabulka ukazatelů a výčet, ale to není nic, co by se nedalo jednoduše zvládnout...
Pod sebamodifikujucim kodom si urcite nepredstavim volanie cez pointer (1), umelu inteligenciu (2) alebo dependency injection (3).
V (1) sa za normalnych okolnosti nic nemodifikuje, je tym aj obycajne volanie virtualnej metody.
U (2) sa modifikuju data a nie kod. Podla tych dat potom algoritmus dava vysledky, ale to je normalne.
A posledne (3) tiez za normalnych okolnosti kod nemodifikuje. Akurat niekomu poviem "sprav mi tuto triedu" a on mi do zavislosti (a ich zavislosti atd) predpripravi hodnoty, ktore najde. Na to nie je treba nic zlozite, iba trochu reflection.
Ked sa niekde v Jave pouziva samomodifikujuci kod, tak to moze byt v bindingu formularov podla Java EE (tusim JSR227), kde sa na gettery a settery objektu priviazu listenery.
Alebo potom JIT, ale obidve spominane sa daju vnimat ako inkrementalna generacia noveho programu, ktory potom pobezi.
S tym pravym sa dalo stretnut v starych programoch, ktore prepisovali svoj spustitelny kod, aby usetrili par bajtov kodu a vyhodnocovanie skokov. Alebo vo virusoch, ktore chceli zakamuflovat, co robia, tak xorovali instrukcie pri kazdom cykle atd.