代码之家  ›  专栏  ›  技术社区  ›  Elad Benda

为什么只有在方法提取之后才需要@SuppressLint(“错误调用”)

  •  0
  • Elad Benda  · 技术社区  · 6 年前

    我有这个和ID代码:

          @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);
       ..
          }
    

    为什么只有在提取后才需要抑制?

    1 回复  |  直到 6 年前
        1
  •  0
  •   TheWanderer    6 年前

    因为通常只从超方法的重写调用它们,而不是从单独的方法调用它们。如果您确实从不同的方法调用它们,您可能不会重写它们(因此 super.whatever() whatever()

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

    至少在您的示例代码中,我并没有真正看到在单独的方法中执行超级调用的原因。如果你需要 foo() 要在超级方法之前被调用,只需将它放在调用之后 福() .

    推荐文章