首页 > 解决方案 > 为什么只有在方法提取之后才需要 @SuppressLint("WrongCall")

问题描述

我有这个安卓代码:

      @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")

标签: androidsuppress-warningsmeasureonmeasure

解决方案


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

如果您不小心复制了一些代码并意外包含了该调用,您的 IDE 会警告您这一点。

至少在您的示例代码中,我真的看不出有理由在单独的方法中进行超级调用。如果你需要foo()在 super 方法之前调用的内容,只需在你调用foo().


推荐阅读