gpt4 book ai didi

java - 当没有任何内容被重写时,为什么我会收到构造函数中可重写方法调用的警告?

转载 作者:行者123 更新时间:2023-12-01 22:47:01 25 4
gpt4 key购买 nike

我收到警告“承包商中可重写的方法调用”,但我不知道为什么。该类不会扩展实现任何东西。当我点击警告时,建议是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:

  1. 注释
  2. 公共(public)、 protected 或私有(private)
  3. 抽象静态最终同步 native strictfp

关于java - 当没有任何内容被重写时,为什么我会收到构造函数中可重写方法调用的警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25192466/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com