我收到警告“承包商中可重写的方法调用”,但我不知道为什么。该类不会扩展
或实现
任何东西。当我点击警告时,建议是
1.将类(class)定为 final类
2. 使方法最终化
3. 使方法静态化
4.将方法设为私有(private)
为什么会发生这种情况,我应该做什么?相关代码如下:
import java.util.Random;
public class Tester {
public Tester(int minLength, int maxLength, int minValue, int maxValue)
{
rand = new Random();
int[] randData = generateArray(minLength, maxLength, minValue, maxValue);//overridable method call in constructor
procArr = new DataManager(randData);
doTests();//overridable method call in constructor
}
public void doTests()
{
procArr.sort();
}
public int[] generateArray(int minLenght, int maxLength, int minVal, int maxVal)
{
final int length = getRandomVal(minLenght, maxLength);
int arr[] = new int[length];
for(int i = 0; i < length; i++)
arr[i] = getRandomVal(minVal, maxVal);
return arr;
}
private int getRandomVal(int min, int max)
{
int n = max - min + 1;
int i = rand.nextInt(n);
return min + i;
}
final private Random rand;
final private DataManager procArr;
}
最佳答案
因为它是可重写的。将其设为私有(private)或最终。
private int[] generateArray(int minLenght, int maxLength, int minVal, int maxVal)
{
final int length = getRandomVal(minLenght, maxLength);
int arr[] = new int[length];
for(int i = 0; i < length; i++)
arr[i] = getRandomVal(minVal, maxVal);
return arr;
}
警告并不是提示您确实重写了方法。它提示别人可以。这对 CTOR 来说是不利的,因为这样你的 CTOR 就会调用一个方法,这个方法的作用是天知道的。通常从 CTOR 调用的方法是私有(private)的。有时您希望它们公开,因此如果它们是公开的,也请将它们定为最终版本。
编辑:回复。你的问题“我注意到将final放在方法签名中的位置并不重要,例如public final void doTests()或final public void doTests()。有更好的方法吗?”
是的,有。 Java 语言规范 says the preferred order is:
- 注释
- 公共(public)、 protected 或私有(private)
- 抽象静态最终同步 native strictfp
关于java - 当没有任何内容被重写时,为什么我会收到构造函数中可重写方法调用的警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25192466/