переключатели прекомпилятора в Java: как изменить путь для импортируемого класса - PullRequest
2 голосов
/ 18 ноября 2011

Мне нужно использовать один и тот же класс на двух разных SDK для платформ.

Хотя класс и его методы одинаковы, путь для доступа к классу различен. На одном устройстве мне нужно использовать:

import a1.a2.classname

а для второго устройства мне нужно использовать:

import b1.b2.b3.classname

Пожалуйста, не спрашивайте меня, почему: я не писал SDK и не могу их поменять.

Итак, вопрос: как бы вы это сделали? Есть ли способ импортировать разные версии одного и того же класса на разных версиях SDK?

В C ++ я бы использовал переключатель прекомпилятора, например:

#ifdef SDK1
#include "path1/class.h"
#else
#include "path2/class.h"
#endif

Как бы вы сделали это в Java?

Пожалуйста, учтите, что я не могу наследовать от класса, потому что у меня есть доступ только к его интерфейсу, а количество методов слишком велико, чтобы думать об использовании прокси

1 Ответ

2 голосов
/ 18 ноября 2011

Вы можете написать легкий прокси-слой и проверить, какие классы доступны с Class.forName(). Это путь, если ваши два класса будут расходиться в подписи и т. Д. В будущем.

Если, однако, вы абсолютно уверены, что они всегда сохранят одинаковую функциональность, просто найдите и замените все экземпляры рассматриваемого импорта в вашем инструменте сборки. В maven вы можете использовать фильтрацию ресурсов, этот вопрос имеет пример.

...