Реализуйте несколько методов для разных уровней API и не решайте, какой из них вызывать - PullRequest
0 голосов
/ 07 апреля 2019

Интересно, возможно ли реализовать несколько методов для поддержки разных уровней API и вызвать правильный без if(android.os.Build.VERSION.SDK_INT >= ...) else if...?

Я хочу использовать новые функции платформы Android, такие как потоки и т. Д., И все еще поддерживать в обратном направлении.

Пример:

написал метод

public void myMethod24() {
    // some logic requires api level N(24) and above
}

но мое приложение поддерживает более низкие API, поэтому мне нужен другой метод, совместимый с ними.

вот метод, совместимый с более старыми версиями:

public void myMethod21() {
    // the same logic, requires api level LOLLIPOP(21) and above
}

Как использовать правильный метод для текущей работающей версии , не делая этого безобразно, если еще:

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
    myMethod24();
} else if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
    myMethod21();
}

Возможно, аннотируйте мои методы с помощью @RequiresApi (), @TargetApi или чего-то еще ..?

я видел этот вопрос но ответ есть, если еще.

1 Ответ

0 голосов
/ 07 апреля 2019

Как использовать правильный метод для текущей запущенной версии, не делая этого безобразно, если еще

Вы не можете.Где-то нужно что-то сделать, чтобы проверить версию и направить к соответствующей логике.

Может быть, аннотировать мои методы с помощью @RequiresApi (), @TargetApi или что-то еще ..?

Они помогут сообщить компилятору, что вы знаете, что делаете.Они не генерируют код сравнения версий.

В зависимости от того, что вы делаете, существующие классы ...Compat могут обрабатывать проверки версий для вас (например, NotificationCompat.Builder).Если бы вы использовали Kotlin, мы могли бы придумать какой-нибудь прикольный код, который скрывает проверки if.И может быть сторонняя библиотека, которая предлагает генератор кода на основе аннотаций, который генерирует проверки if.

...