почему @SuppressLint ("WrongCall") требуется только после извлечения метода - PullRequest
0 голосов
/ 30 сентября 2018

У меня есть этот код andorid:

      @Override
      protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
       //some code
          super.onMeasure(widthMeasureSpec,heightMeasureSpec);
   ..
      }

без ошибок.

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

вызов метода specious, вероятно, должен вызывать measure

      @Override
      protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
       ...
        foo(textMaxWidth);
      }

      private void foo(int textMaxWidth) {
...
          super.onMeasure(widthMeasureSpec,heightMeasureSpec);
   ..
      }

, почему подавление необходимо только после извлечения?

@ SuppressLint ("WrongCall")

1 Ответ

0 голосов
/ 30 сентября 2018

Потому что обычно вы вызываете супер методы только из их переопределений, а не из отдельных методов.И если вы вызываете их из отдельных методов, вы можете не переопределять их (поэтому super.whatever() совпадает с whatever());

Ваша IDE предупреждает вас об этом в случае, если вы случайно скопировали некоторый коди включил этот звонок случайно.

По крайней мере, в вашем примере кода я не вижу смысла делать супер вызов в отдельном методе.Если вам нужно, чтобы содержимое foo() вызывалось до супер-метода, просто поместите его после вызова foo().

...