我在这里过度使用 final 吗?

Do I overuse final here?

我已经阅读了很多关于 final 以及何时使用或不使用它的内容,我得出的结论是这主要是个人设计。因此,请考虑下面的 class,这是我过度使用 final 的情况吗?我知道我应该编写可读且清晰的代码,我认为考虑到所有最终结果,这仍然很清楚。

public final class ConsoleUtil {

private static final Logger LOGGER = Bukkit.getLogger();

private ConsoleUtil() {

}

public static void info(final Object... objects) {
    log(Level.INFO, objects);
}

public static void warning(final Object... objects) {
    log(Level.WARNING, objects);
}

public static void severe(final Object... objects) {
    log(Level.SEVERE, objects);
}

public static void exception(final Exception e, final Object... objects) {
    warning(objects);
    e.printStackTrace();
}

private static void log(final Level level, final Object... objects) {
    for (Object object : objects) {
        LOGGER.log(level, "[HubControl] " + object.toString());
    }
  }

}

您关于选择主要取决于个人的结论大部分是正确的,因此您不应该真的问这个问题,因为答案偏离主题 "primarily opinion-based"。

我会尽量给你一个尽可能不基于意见的答案。

最终性是任何数据项最优秀的品质,任何做某事的机会final都应该顽强地追求。另一方面,对于 java,将 final 添加到每个可以最终化的小东西变得非常乏味。考虑到编译器分析您的代码并可以确定变量是否 effectively final 而最终性实际上很重要,这也变得有点徒劳。

因此,大多数 java 开发人员采取的方法是避免在所有地方使用 final。请注意,这不是主观的,而是行业状况的报告。

我们可以要求 Oracle 的专家为语言添加默认确定性,这样除非另有声明,否则一切都是最终确定的,或者我们可以使用已经内置默认确定性的其他语言。