Frage

Ich mag Generika sehr und benutze sie, wo ich kann. Hin und wieder muss ich eine meiner Klassen in einem anderen Projekt verwenden, das auf einem alten JVM (vor 5.0) ausgeführt wird, muss auf Javame ausgeführt werden (wo Generika weder zugelassen sind) noch in Microsoft J# (was sehr schlecht ist Unterstützung für Generika).

Im Moment entferne ich alle Generika manuell, was bedeutet, auch viele Abgüsse einzuführen.

Da Generics als nur Kompilierungszeitpunkte nur Kompilierungszeiten sein und jeder generische Code möglicherweise automatisch in den nicht generischen Code konvertiert wird, frage ich mich, ob es ein Tool gibt, das dies für mich tun kann.

Wenn es kein solches Tool gibt, wie könnte ich das Problem sonst lösen? Sollte ich Generika vollständig aufhören zu verwenden?

Es gibt bereits Antworten im Zusammenhang mit Bytecode Compability. Was ist, wenn ich brauche? Quellcode Compability aus irgendeinem Grund?

War es hilfreich?

Lösung

Sie müssen so etwas verwenden Retroweaver um so etwas zu erreichen. Die anderen Antworten auf diese Frage sind leicht irreführend. Generika sind eine Art Bytecode, die mit früheren Versionen kompatibel sind, jedoch nicht vollständig (siehe java.lang.reflect.Type Wenn du mir nicht glaubst). Außerdem gibt es ein Problem mit dem Bytecode -Versionsattribut, das verhindern, dass eine Klasse, die gegen 1.5 zusammengestellt wurde, auf einer früheren Version ausgeführt wird. Retroweaver arbeitet bei beiden Problemen und ermöglicht gleichzeitig anderen Java 5 -Funktionen wie Anmerkungen und Enums.

Andere Tipps

In NetBeans (ich bin mir nicht sicher, welche IDE Sie verwenden) können Sie die Quellcode -Kompatibilität auf eine festgelegte Java -Version festlegen - stellen Sie sie einfach auf eine, die Generika unterstützt. Wie bereits veröffentlicht, sind Generika von Bytecode kompatabel mit alten JVM / JRE -Versionen und sollten hoffentlich über die Box herausarbeiten.

Nach meinem besten Wissen ist Java 5 nicht Byte-Code-kompatibel mit Java 1.4. Das heißt, Sie können Java 5 -kompilierte Klassen mit einer früheren VM nicht verwenden.

Sie können Retroweaver überprüfen. Dies wurde viel erwähnt, als Generika eingeführt wurden. Ich persönlich habe keine Erfahrung damit.

Haben Sie Google gefragt? Meine Suche tauchte auf http://www.publicobject.com/glazedlists/documentation/generics_and_java_1.4_with_one_codeBase.pdf, was ein sehr interessanter Ansatz erscheint.

Sein Bytecode kompatibel, es sollte mit einem alten Dolmetscher aus dem Box herausarbeiten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top