为什么仅在方法提取后才需要@SuppressLint(“ WrongCall”)

时间:2018-09-30 19:11:21

标签: android suppress-warnings measure onmeasure

我有这个andorid代码:

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

没有错误。

但是当我将最后几行提取到私有方法中时,会收到此警告,要求向私有方法添加抑制注释。

可能的方法调用,应该应该调用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 :(得分:0)

因为通常您只从其替代方法调用超级方法,而不是从单独的方法调用。而且,如果确实从单独的方法调用它们,则可能不会覆盖它们(因此super.whatever()whatever()相同);

您的IDE会警告您,以防您不小心复制了一些代码并意外地包含了该调用。

至少在您的示例代码中,我没有真正看到在单独的方法中进行超级调用的理由。如果您需要在super方法之前调用foo()的内容,只需将其放在调用foo()之后。