java - 如何在所有实现接口(interface)的类中设计一个通用的静态方法

标签 java inheritance interface static abstract

我有一个名为 Relation 的接口(interface),由类 BasicRelation 实现,并由子类扩展(例如 ParentChildSibling配偶)。在开发我的代码时,我意识到我经常需要一种方法,它采用关系的 String 表示来创建它。例如:

public class ParentChild implements Relation extends BasicRelation {

  // e.g. "Jack is Emily's father. Jill is her mother." will return the list
  // <ParentChild(Jack, Emily), ParentChild(Jill, Emily)>
  static List<ParentChild> fromSentence(String s) {
    ...
  }
}

现在,因为我发现自己在每个类中都需要这个方法 (fromSentence(String)),也许在 BasicRelation 中除外,所以我想移动它 向上层次结构。问题是该方法的内部细节依赖于子类,所以我不能将它作为接口(interface) Relation 或父类(super class) 中的 static 方法基本关系

不幸的是,在 Java 中,也不可能有 static abstract 方法。

有没有办法确保 BasicRelation 的每个子类(或实现 Relation 的每个类)都实现 fromSentence(String)?如果不是,我应该以完全不同的方式设计它吗?我想这最后一个问题更多的是请求设计建议而不是问题。

最佳答案

为什么静态方法需要在接口(interface)中?是什么阻止您拥有“实用程序”类并在其中包含方法?

public class RelationUtility {
    public static BasicRelation relationFactory(String asString) {
        ....
    }
}

作为静态方法,除了访问私有(private)成员之外别无他法,这也可以通过对这些成员的“默认”权限来实现....

关于java - 如何在所有实现接口(interface)的类中设计一个通用的静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26154149/

相关文章:

java - JMS QPID 句柄重新连接

java - 删除未实现的方法

python - Django 中基于接口(interface)和 API 的编程

java - 仿射变换 - 围绕一个点缩放

Java 线程可运行/可调用

java - 为什么 BufferedWriter 不写入文件?

c++ - 类之间的共享变量 C++

java继承方法

继承

oop - 什么时候需要以接口(interface)的形式创建抽象?