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!

4 Responses to “Nowy kod na starej JVM”

  1. Tomek N. Says:

    Nie prościej skorzystać z gotowca? http://retroweaver.sourceforge.net

  2. Koziolek Says:

    O warto o tym wiedzieć, choć nie jest to w pełni to co potrzebuję, bo nie ruszy na JVM 1.3.

  3. Michał Gruca Says:

    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

  4. Koziolek Says:

    @Michał, obecnie 99% kodu nie jest zgodne z jvm <1.5 chociażby dzięki wymienionej we wpisie pętli foreach.

Leave a Reply