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

标签 java netbeans

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

相关文章:

java - 在 RCP TableViewer 中手动触发 CellEditor

java - Eclipse - 像 Netbeans 一样编辑 web.xml (GUI)

c - 在 Netbeans 中使用 C 打印笑脸

java - 使用 AsyncTask 从 url 获取文本。代码由于某种原因无法工作

java - Oracle SQL - 计算并发事件数

java - 考虑边界条件的数的反转

java - 通过标签设置和获取 fragment 始终返回 null

c - printf 语句未在 netbean 中的 scanf 语句之前执行

java - 编译应用程序时 AspectJ 6 + Netbeans 7.0 错误

java - ExceptionInInitializerError - 类未编译