RequiresApi vs TargetApi андроид андроид

В чем разница между TargetApi и TargetApi ?

Образец в котлин:

 @RequiresApi(api = Build.VERSION_CODES.M) @TargetApi(Build.VERSION_CODES.M) class FingerprintHandlerM() : FingerprintManager.AuthenticationCallback() 

ПРИМЕЧАНИЕ. Для FingerprintManager.AuthenticationCallback требуется api M

ПРИМЕЧАНИЕ 2: если я не использую failer TargetApi lint с class requires api level 23... ошибки, то class requires api level 23...

@RequiresApi@RequiresApi что аннотированный элемент должен вызываться только на данном уровне API или выше.

@TargetApi – указывает, что Lint должен рассматривать этот тип как ориентированный на данный уровень API, независимо от цели проекта.

Подобно тому, что сказал Майк, как вы можете видеть в документации:

Обозначает, что аннотированный элемент должен вызываться только на данном уровне API или выше.

Это похоже на старую аннотацию @TargetApi, но более четко выражает, что это требование для вызывающего, а не используется для «подавления» предупреждений в методе, превышающем minSdkVersion.

Как вы можете видеть здесь, это фактически принуждает вызывающего пользователя проверить API, который использовался при вызове этого метода, вместо того, чтобы просто удалить предупреждение из вашей IDE / LINT.

Вы можете сравнить это с аннотациями @NonNull или @Null, они обеспечивают, чтобы вызывающий пользователь мог / не мог отправить в функцию нулевые значения.

Из JavaDocs в https://developer.android.com/reference/android/support/annotation/RequiresApi.html :

[@RequiresApi] Это похоже на старую аннотацию @TargetApi, но более четко выражает, что это требование для вызывающего, а не для «подавления» предупреждений в методе, превышающем minSdkVersion.

Я полагаю, что они функционально эквивалентны, но @RequiresApi , по-видимому, новее и имеет более высокий шанс быть расширенным, чтобы включить больше функциональности.