java - 抽象类中的静态方法

标签 java oop inheritance static

我想像这样定义一个抽象方法:

public abstract class Saveable {
    public Set<Field> getFieldSet();
    ...
}

getFields() 应始终返回相同的输出,而不管对象的状态如何。但是,我不能将其声明为静态方法,因为我希望它被覆盖。现在我正在实现一个扩展 Saveable 的类 User 并且它有一些需要字段集的静态方法。显然,我无法获得它,因为我没有对象。关于允许我在静态方法中获取字段的设计有什么想法吗?

最佳答案

一种方法是通过将正确对象的实例传递给静态方法,然后在该对象上调用 getFields 来“伪造”this 引用。

另一种选择是将字段列表存储在类的静态字段中。您覆盖的 getFields() 实现可以返回它(或者最好是它的副本),并且您的静态方法可以直接访问它。

我的偏好是实现后一个选项,因为它不那么笨拙(因为你永远不必新建一个无用的对象来传递给静态方法。)同样,它捕获了类的想法字段不依赖于给定的实例。

关于java - 抽象类中的静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6550627/

相关文章:

C# - 泛型和继承问题

java - 用homebrew安装bazel的问题

java - 从程序中更改 persistence.xml 中的值

java - 为什么即使我已经采取了包声明也没有创建文件夹结构?

arrays - Matlab 对象数组的逻辑索引

java - 访问子类对象自己的私有(private)字段

java - Java 包之间的通信

c# - 将 Generic<Derived> 转换为 Generic<Base>

Java:无法访问对象的元素

具有接口(interface)和默认实现的 C++ 继承