Monkey patching w Javie

0

Hej,

Czy spotkał się ktoś z wykorzystaniem Monkey Patching znanego z Ruby w Javie? Próbowałem coś znaleźć na własną rękę po sieci ale jedyne do czego się dokopałem to JRuby a interesuje mnie wykorzystanie to w czystej Javie.

0

Może mechanizmy refleksji Javy Ci jakoś pomogą. Takie magie prawie na pewno da się robić w Groovim (też działa na platformie JVM i jest praktycznie w 100 % kompatybilny z Javą).

0

Nie wiem do czego Ci to potrzebne, ale jeśli do debugowania, to w Eclipse można tak zrobić i nazywa się to hotswap. Należy odpalić przez "debug as > Java Application", można zatrzymać jego działanie klikając suspend, zmienić kod dowolnej metody i kontynuować.

0

Java nie ma monkey patchingu. Groovy, jak wspomniano, ma. Groovy jest calkiem przyjemnym jezykiem, a od wersji 2.0 ma statyczne typowanie i kompilacje (jedna z ostatnich beta, ma pare bugow). Mozna patchowac cale klasy (lub hierarchie), lub pojedyncze instancje.

0

Groovy nie ma statycznego typowania. Jedyne to to jak zrobisz:
String s = jakasMetoda();

to oni generuja:
Stirng s = (String) jakasMetoda();

i wsio. To nie zniknie z 2.x. Beda dodane nowe tryby, cos jakby Groovy++ jesli sie bawiles. Poczytaj tutaj:
http://docs.codehaus.org/display/GroovyJSR/GEP+8+-+Static+type+checking
http://docs.codehaus.org/display/GroovyJSR/GEP+10+-+Static+compilation

0

def cos = "string"
println cos.intValue()

nie mruknie nawet podczas kompilacji.

Integer cos = "String" // tak naprawde Integer cos = (String) "String"

rowniez sie kompiluje bez problemu. Oba wybuchaja podczas runtime.

Ze statyczna kompilacja / typowaniem dostaniesz blad kompilatora / warning.

Nie wiem co chcesz mi powiedziec - ze oni w Groovy 2.x potworzyli te GEPy i od pol roku na mailing listach Grooviego (jestem na users i dev) pisza o implementacji czegos, co juz od dawna maja? Ze nie rozrozniasz co to znaczy rzutowanie i ClassCastException / GroovyCastException w runtime, a statyczne sprawdzanie typow podczas kompilacji?

Ok, niech i tak bedzie, pewnie masz racje.

0

Grooviego już zapomniałem w sumie, ale i tak przecież typ zostanie sprawdzony :] Pomyliło mi się właśnie statyczne typowanie ze sprawdzaniem typów (tzn chodziło mi o drugie, a napisałem pierwsze) w wyrażeniach typu:
Typ zmienna = cośtam;

0

No tak zostanie sprawdzony. Z typem dostaniesz GroovyCastException w momencie przypisania, bez dostaniesz MissingMethodException w momencie wywolania metody. Oba w runtime. Zgoda, tez wole dostac problem przy przypisywaniu, ale nie zawsze mozna - gdy uzywasz duck typing, nie masz zadnego wspolnego typu do ktorego mozna przypisac - taki jest wlasnie duck typing.

0

Groovy 2 od dzisiaj final, ponizej mozna poycztac, co wprowadza.

http://www.infoq.com/articles/new-groovy-20

Z pewna niesmialoscia chcialem zwrocic uwage, co jest na pierwszym miejscu. Tak wiem, jestem nudny...

1 użytkowników online, w tym zalogowanych: 0, gości: 1