gpt4 book ai didi

java - 为什么 public abstract final class 在语法上无效?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:54:26 24 4
gpt4 key购买 nike

我有一个 foo 类,它只不过是几个 static 函数和变量的占位符。有点像 C++ 中的 namespace

因此,创建 foo 的实例并从 foo 继承是没有意义的。

所以我很想写public abstract final class foo。但是 Java 不喜欢这样。我可以在 C++ 中使用纯虚函数和 final 来完成,但为什么我不能在 Java 中做同样的事情?我的设计有什么问题?

更新:我对此表示强烈反对(在撰写本文时为 -4),所以我显然还不够清楚。这是具体的用例。它是 JNI 和支持 C 库中使用的错误日志记录的严重性级别代码负载:

public abstract class Severity
{
public static final int TRACE = 0x00000001;

public static final int INFORMATION = 0x00000002;

public static final int WARNING = 0x00000003;

public static final int ERROR = 0x00000004;

public static final int CRITICAL_ERROR = 0x00000005;

public static final int OFF = 0x00000006;
}

所以它几乎就像一个枚举器,但 JNI 和 C 库的限制意味着它不是最优的。使这个abstract final 对我来说似乎是完全合理的,并且正如我所说,C++ 中允许等效。

最佳答案

因为 abstract 说它有一些未实现的方法,而 final 说它不能被继承。这意味着这个类永远不会有用。如果您的类不包含任何实例方法,只需将其设为 final 即可:)。无需将其标记为 abstract,因为它不是。您可能还想将构造函数设为 private,这样就没有人可以实例化它。

例如参见 JLS 8.1.1.1 :

8.1.1.1. abstract Classes

An abstract class is a class that is incomplete, or to be considered incomplete.

[...]

JLS 8.1.1.2

8.1.1.2. final Classes

[...]

It is a compile-time error if a class is declared both final and abstract, because the implementation of such a class could never be completed (§8.1.1.1).

关于java - 为什么 public abstract final class 在语法上无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33149546/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com