我有一个名为 Relation
的接口(interface),由类 BasicRelation
实现,并由子类扩展(例如 ParentChild
、Sibling
,配偶
)。在开发我的代码时,我意识到我经常需要一种方法,它采用关系的 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/