接口上静态方法的替代方法,用于强制一致性
在Java中,我希望能够定义标记接口,强制实现提供静态方法。例如,对于简单的文本序列化/反序列化,我希望能够定义一个看起来像这样的接口:
public interface TextTransformable<T>{
public static T fromText(String text);
public String toText();
由于Java中的接口不能包含静态方法(如许多其他帖子/线程中所述:这里,这里和这里这个代码不起作用。
然而,我正在寻找的是一些合理的范式来表达相同的意图,即对称方法,其中一个是静态的,并由编译器强制执行。现在我们能想到的最好的是某种静态工厂对象或通用工厂,这两者都不是真正令人满意的。
注意:在我们的例子中,我们的主要用例是,我们有很多很多的“值对象”类型 - 枚举或其他具有有限数量的值的对象,通常不会超过其值,并且我们每秒解析/反解析数千次,所以实际上确实关心重用实例(如浮点数,整数等)及其对内存消耗/ g.c的影响。
有什么想法吗?
编辑1:为了澄清一些混淆 - 我们有很多不同的对象适合这种模式 - 实际上我们正试图为具有2个语义的调用者想出一些优雅的东西:
- 接口作为契约 - 访问的统一性(例如,文本可转换作为一种功能)
- 要求子类/实现实现(例如,强制它们实现自己的转换
就我们对Flyweight,Factories的想法而言 - 它们都是我们考虑过的选项,实际上我们正试图看看我们是否可以找到更优雅的东西,而不是依靠JavaDoc说“实现一个工厂并将调用委托给它,或者按照惯例在XXX位置公开它”