猿问

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

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


file 从 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));

}


慕姐4208626
浏览 297回答 3
3回答

肥皂起泡泡

静态方法不受覆盖。的final关键字隐藏方法。有关更多详细信息,请参阅评论中的链接。请注意,您不应依赖该行为,尽管语言允许这样做。您应该始终将静态方法作为<class-name>.<method-name>.

qq_花开花谢_0

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

偶然的你

应用于方法时,final关键字的含义与应用于字段时的含义不同:它并不意味着“常量”。您可以使用一些逻辑实现您想要的:private static String batchNo;public static String parseBatchNo(String file) {&nbsp; &nbsp; if (batchNo == null) {&nbsp; &nbsp; &nbsp; &nbsp; batchNo = file.substring((file.lastIndexOf("-") + 1), (file.length() - 4));&nbsp; &nbsp; }&nbsp; &nbsp; return batchNo;}(注意,上述方法不是线程安全的。如果您需要从多个线程调用它,它会稍微复杂一些。)
随时随地看视频慕课网APP

相关分类

Java
我要回答