Android @SuppressWarnings на уровне операторов, а не на уровне методов - PullRequest
0 голосов
/ 10 мая 2018

TL; DR: Может ли Android @SuppressWarnings("deprecation") или аналогичный быть применен к одному выражению, а не ко всему методу?

У меня есть метод myMethod, который использует устаревший метод ImageView.setAlpha():

public void myMethod(ImageView icon) { icon.setAlpha(0xFF); }

Чтобы избежать использования устаревшего метода в Jelly Bean и последующих выпусках, при обеспечении обратной совместимости метод myMethod можно переписать следующим образом:

public void myMethod(ImageView icon) { 
  if (android.os.Build.VERSION.SDK_INT 
                                >= android.os.Build.VERSION_CODES.JELLY_BEAN)
     icon.setImageAlpha(0xFF);
  else 
     icon.setAlpha(0xFF);
}

Кроме того, предупреждения командной строки, генерируемые Gradle / Lint, можно подавить, добавив метод myMethod с @SuppressWarnings("deprecation").Но это подавляет все устаревшие предупреждения, генерируемые методом myMethod, а не только одно предупреждение, генерируемое оператором icon.setAlpha(0xFF).

Можно ли подавить одно предупреждение об устаревании, сгенерированное оператором icon.setAlpha(0xFF), вместо того, чтобы подавлять все предупреждения об устаревании, сгенерированные методом myMethod?

1 Ответ

0 голосов
/ 10 мая 2018

Вы можете достичь этого следующим образом, если используете Android Studio:

 //noinspection deprecation
 icon.setAlpha(0xFF);

Для дальнейшего использования: Правильный формат может быть легко создан в Android-Studio следующим образом:

  1. Нажмите alt + Enter в операторе, который выдает предупреждение.
  2. Затем разверните параметр Deprecated API usage Параметры
  3. Нажмите Suppress for statement

На следующем рисунке показан процесс:

enter image description here

В вашем случае, поскольку вы не используете IDE:

  • К сожалению, нет прямого способа достичь этого на уровне тела метода. Поскольку вы уже переместили устаревшую деталь в отдельный метод и отметили ее @SuppressWarnings, это должно быть наилучшим достижением.
  • Есть некоторые сообщения, которые утверждают, что решили это, используя полное имя класса вместо import. Но похоже, что проблема была исправлена ​​в Java 9. Так как текущая популярная версия Java для Android - 8.x, это должно помочь в краткосрочной перспективе. Вы можете сослаться на это SO для более подробной информации
...