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