编译警告"static method declared final"的原因是什么?



>我有一个常量类,我正在尝试在运行时使用公共静态最终字符串设置一个批号常量。我的 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;
}

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

相关内容

  • 没有找到相关文章

最新更新