Nowy kod na starej JVM
Mamy sobie klasę:
Listing 1. Przykładowa klasa
public class A{
public static void main(String[] a){
for(String x: a)
System.out.println(x);
}
}
Klasa jest zgodna z java 1.5+, ale kompilujemy w Java 1.7. Nagle okazuje się, że trzeba uruchomić to w Java 1.3… problem jest doskonale widoczny. Pętla foreach z javy 1.5. W praktyce jedną pętle można zamienić na itereator, ale set pętli… nie koniecznie.
Co robimy?
Ano kompilujemy sobie to javac i następnie otwieramy w hexedytorze. Ósmy bajt zamieniamy na 2F, zapisujemy i po problemie.
Naiwne? Oczywiście. Działa? No ba!












August 17th, 2012 at 21:54
Nie prościej skorzystać z gotowca? http://retroweaver.sourceforge.net
August 18th, 2012 at 09:45
O warto o tym wiedzieć, choć nie jest to w pełni to co potrzebuję, bo nie ruszy na JVM 1.3.
August 20th, 2012 at 10:53
erm, jest tylko problem jeśli często masz deployować takie rozwiązanie.
No i przy większym projekcie jednak bym się zastanowił czy nie wprowadzić modułu który by zapewniał backward compability i overridował klasy które są only java 1.5+ kompatybilne
August 20th, 2012 at 10:58
@Michał, obecnie 99% kodu nie jest zgodne z jvm <1.5 chociażby dzięki wymienionej we wpisie pętli foreach.