Для моего проекта требуется 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?
Нашел этот пост, но он не кажется полезным.
Любая помощь приветствуется. кк.