>我有一个常量类,我正在尝试在运行时使用公共静态最终字符串设置一个批号常量。我的 IDE 给我一个警告"静态方法声明为最终",我想知道我是否做错了什么。
文件从 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));
}
静态方法不受重写。
final
关键字隐藏该方法。有关更多详细信息,请参阅评论中的链接。
请注意,您不应依赖该行为,尽管语言允许这样做。应始终将静态方法调用为<class-name>.<method-name>
。
静态方法不能通过扩展类来覆盖,因此在这种情况下final
关键字是无用的。
当应用于方法时,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;
}
(注意,上述方法不是线程安全的。如果您需要从多个线程调用它,它会稍微复杂一些。