Мой проект требует Java 1.6 для компиляции и запуска. Теперь у меня есть требование, чтобы оно работало с Java 1.5 (со стороны маркетинга). Я хочу заменить тело метода (возвращаемый тип и аргументы остаются прежними), чтобы компилировать его с Java 1.5 без ошибок.
Подробности: У меня есть служебный класс с именем OS
, который инкапсулирует все специфические для ОС вещи. У него есть метод
public static void openFile(java.io.File file) throws java.io.IOException {
// open the file using java.awt.Desktop
...
}
для открытия файлов, например, двойным щелчком мыши (start
команда Windows или open
эквивалент Mac OS X). Поскольку его нельзя скомпилировать с помощью Java 1.5, я хочу исключить его во время компиляции и заменить другим методом, который вызывает run32dll
для Windows или open
для Mac OS X с использованием Runtime.exec
.
Вопрос: Как я могу это сделать? Могут ли здесь помочь аннотации?
Примечание. Я использую ant и могу создать два java-файла OS4J5.java
и OS4J6.java
, которые будут содержать класс OS
с требуемым кодом для Java 1.5 и 1.6, и скопировать один из них в OS.java
до компиляция (или уродливый способ - заменить содержимое OS.java
условно в зависимости от версии Java), но я не хочу этого делать, если есть другой способ.
Более подробно: в C я мог бы использовать ifdef, ifndef
, в Python нет компиляции, и я мог проверить функцию, используя hasattr
или что-то еще, в Common Lisp я мог бы использовать #+feature
. Есть ли что-то подобное для Java?
Найден этот пост , но он не кажется полезным.
Любая помощь очень ценится. кч.