Считаю, что у меня есть два продукта в моем проекте Android с именем "local" и "international". Я просто даю скелет моей ситуации, поэтому любезно игнорирую другие ошибки. Рассмотрим, что у меня уже есть другой источник Set для разных вкусов.
Теперь в моем "местном" вкусе мне нужен только один метод, как указано ниже.
// local flavor file
interface UserDao {
List<User> getAllUser();
}
В моем международном вкусе мне также нужна дополнительная функция, чтобы получить пользователя в группе по имени. Итак, имея два метода.
// international flavor file
interface UserDao {
List<User> getAllUser();
List<User> getAllUserGroupByName();
}
Но проблема в том,
У меня есть одно действие, из которого я вызываю этот метод.
Когда я вызываю метод getAllUserGroupByName()
из активности, он компилируется, если
текущий вкус " международный", но он не будет компилироваться на " локальном", так как он не содержит этого метода.
Я пробовал называть этот метод, обертывая, если условие, как показано ниже,
// BuildUtils is my helper class to get current flavor check easily.
if (BuildUtils.isInternational()) {
getAppDatabase().UserDao().getAllUserGroupByName();
}
Но он тоже не работает.
Мне не нужно следующее решение.
- Два действия для каждого вкуса.
- Я уже решил это, объединив оба интерфейса в одном интерфейсе. (который также действителен, так как он не содержит никакой реализации).
Обновление
После некоторых исследований и ответов, предоставленных @manouti
Проблема в том, что Java является статически типизированным языком, поэтому размещение если условие не означает, что компилятор избегает проверки код с вызовом getAllUserGroupByName.
Итак, есть ли способ, с помощью которого система сборки может игнорировать конкретный код в соответствии с вкусом для компиляции кода?
ИЛИ
любой инструмент или функция IDE для студии Android, которая отбросит конкретный код в соответствии с вкусом для компиляции.