android - 为什么只有在方法提取之后才需要 @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")
解决方案
因为通常你只从它们的覆盖中调用超级方法,而不是从单独的方法中调用。而且,如果您确实从单独的方法中调用它们,则可能不会覆盖它们(super.whatever()
与 相同whatever()
);
如果您不小心复制了一些代码并意外包含了该调用,您的 IDE 会警告您这一点。
至少在您的示例代码中,我真的看不出有理由在单独的方法中进行超级调用。如果你需要foo()
在 super 方法之前调用的内容,只需在你调用foo()
.