编译警告“静态方法声明为final”的原因是什么?

时间:2018-10-03 14:18:41

标签: java

我有一个常量类,并且试图在运行时使用公共静态最终String设置批号常量。我的IDE给我警告“静态方法声明为final”,我想知道我做错了什么。

文件从Spring yml文件中获取价值。

私有字符串文件; (xxx-12345.txt)

public String getBatchNo() {
    return parseBatchNo(file);
}

public static final String parseBatchNo(String file) {
    return file.substring((file.lastIndexOf("-") + 1), (file.length() - 4));
}

3 个答案:

答案 0 :(得分:8)

静态方法不受覆盖。

QAction关键字隐藏该方法。有关更多详细信息,请参见评论中的链接。

请注意,尽管语言允许,但您不应依赖该行为。您应始终以import sys import calendar from PyQt5 import QtCore, QtWidgets class MainWindow(QtWidgets.QMainWindow): def __init__(self, parent=None): super(MainWindow, self).__init__(parent) menu_months = self.menuBar().addMenu("Settings") menu_months.triggered.connect(self.on_triggered) for i in range(1, 13): name = calendar.month_name[i] action = menu_months.addAction(name) action.setCheckable(True) @QtCore.pyqtSlot(QtWidgets.QAction) def on_triggered(self, action): print("{} : {}".format(action.text(), action.isChecked())) # uncomment if you want to see the status of all actions """menu = self.sender() for action in menu.actions(): print("{} : {}".format(action.text(), action.isChecked()))""" if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) w = MainWindow() w.resize(640, 480) w.show() sys.exit(app.exec_()) 的身份调用静态方法。

答案 1 :(得分:2)

扩展类不能覆盖静态方法,因此在这种情况下,final关键字是无用的。

答案 2 :(得分:0)

final关键字在应用于方法时的含义与应用于字段时具有不同的含义:它并不表示“常量”。

您可以使用一些逻辑来实现所需的目标:

private static String batchNo;

public static String parseBatchNo(String file) {
    if (batchNo == null) {
        batchNo = file.substring((file.lastIndexOf("-") + 1), (file.length() - 4));
    }
    return batchNo;
}

(注意,上述方法不是线程安全的。如果需要从多个线程中调用它,它将变得稍微复杂一些。)