zu verpacken Ich möchte ein Stück Code, der absolut muss auf Java 1.5 ausführen. Es gibt einen Teil des Codes, in dem das Programm "erweitert" werden kann, wenn die VM eine 1.6 VM ist.Java: einfachste Möglichkeit, Java 1.5 und 1.6 Code
Im Grunde ist es diese Methode:
private long[] findDeadlockedThreads() {
// JDK 1.5 only supports the findMonitorDeadlockedThreads()
// method, so you need to comment out the following three lines
if (mbean.isSynchronizerUsageSupported())
return mbean.findDeadlockedThreads();
else
return mbean.findMonitorDeadlockedThreads();
}
Was einfachste Weg wäre, diese kompilieren auf 1,5 haben und noch tun das 1,6-Methode aufruft, wenn sie auf 1,6?
In der Vergangenheit habe ich etwas ähnliches getan, indem ich eine einzigartige 1.6-Klasse kompiliert habe, die ich mit meiner App verpacke und mit einem ClassLoader in 1.6 instanziiere (weil eine 1.6 JVM perfekt ist 0x32 und 0x31 Klassen zu mischen), aber Ich denke, es ist ein wenig übertrieben (und ein bisschen peinlich, weil Sie während des Build-Prozesses sowohl 0x31 als auch 0x32 .class-Dateien erstellen müssen).
Wie soll ich gehen, wenn ich die obige Methode auf 1.5 kompilieren wollte? Vielleicht Reflexion verwenden, aber dann, wie (ich bin nicht vertraut mit Reflexion)
Hinweis: Wenn Sie neugierig sind, kommt das obige Verfahren aus diesem Artikel: http://www.javaspecialists.eu/archive/Issue130.html
(aber ich will nicht "Kommentieren Sie die drei Zeilen" wie in dem Artikel, ich möchte, dass dies zu kompilieren und auf beiden 1.5 und 1.6 laufen)
@Mnementh: ok, aber was würde dann die Reflexions Code aussehen ? – SyntaxT3rr0r
Ich habe meine Antwort so bearbeitet, dass sie den Reflexionscode enthält. – Mnementh
@Mnementh: +1 großartig ... Ich werde versuchen, das heute Nachmittag einzurichten :) – SyntaxT3rr0r