我有一个常量类,并且试图在运行时使用公共静态最终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));
}
答案 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;
}
(注意,上述方法不是线程安全的。如果需要从多个线程中调用它,它将变得稍微复杂一些。)