Ich habe folgendes Problem:
Ich habe ein Programm geschrieben, dass unter Java 1.6 wunderbar läuft, jedoch unter 1.5 nicht lauffähig ist, weil bestimmte Klassen fehlen oder manche Features noch nicht bekannt sind.
Gibt es eine Möglichkeit, dass Programm unter 1.5 zum laufen zu bekommen, wenn ich alles, was unter 1.5 noch nicht bekannt ist irgendwie abgrenze?
Schon mal ein Beispiel, wie es nicht geht :wink:
Code:
if (System.getProperty("java.version").compareTo("1.6.0")>=0)
{
javax.swing.table.TableRowSorter<DefaultTableModel> urlSorter
= new javax.swing.table.TableRowSorter<DefaultTableModel>();
urlSorter.setModel(urlTableModel);
urlTable.setRowSorter(urlSorter);
urlSorter.setSortable(2,false);
urlSorter.setSortable(3,false);
}
Der Compiler von 1.5 will immer noch den Quelltext in der if-Anweisung compilieren obwohl ihn ein 1.5er Programm nie erreichen würde.
System.getProperty("java.version") wird erst zur Laufzeit aufgelöst, nicht durch den compiler.
Was du vor hast kann so also nicht funktionieren.
Mir ist auch nicht bekannt, dass der javac etwas in der Richtung kann. Wenn überhaupt müsstest du das über ein Build-Tool lösen. Allerdings macht das auf mich einen eher schlechten Eindruck. Wenn es unter 1.5 laufen soll dann solltest du den Code auch so schreiben.
Ich finde die Idee nicht schlecht:
man will seine JTable ab 1.6 um eine Funktionalität bereichern, die es bis 1.5 eben noch nicht (standardmässig) gibt.
Das Problem hatte ich auch schon und konnte es über zwei Klassen lösen.
Lösen kann man das sicher über das dynamische nachladen einer Klasse per Reflexion. Irgendwie macht es aber einen unsauberen Eindruck auf mich. Das ist aber nur meine eigene Meinung.
Vielleicht liegt das an meiner Meinung zu Java, was für mich bedeutet, dass ein Programm auf jedem System (mehr oder weniger) gleich läuft.... wenn es denn läuft.
Wenn ich die Funktion wichtig für das Programm finde würde ich sie selber bauen, so, dass sie auch unter 1.5 läuft.
Allerdings muss ich zugeben, dass es mir oft schwer fällt mich für eine neue Version bei der Entwicklung zu entscheiden. Die neuen Funktionen der Version sind schon verführerisch, dagegen steht es dem Anwender zuzumuten, dass er vielleicht extra eine neue JVM herunter laden muss.
Ich kann also den Wunsch durchaus verstehen.
Meine Lösung sieht nun so aus, dass ich alles, was nur unter 1.6 läuft, in eine neue Klasse ausgelagert hab.
Diese Klasse habe ich doppelt, bei der zweiten Version sind halt alle Methoden ohne Inhalt.
So muss dann beim Wechsel von 1.5 auf 1.6 nur diese eine Klasse ausgewechselt werden.