如何从 Java POJO 调用单例方法?

How to call a singleton method from a Java POJO?

我想知道是否可以通过 POJO 的接口调用单例 bean 的方法。也许这个想法或架构是错误的……但如果可能的话,这是我想完成的,因为这是项目的架构。 我注意到当我从 POJO 调用 getInstance() (来自单例接口的方法)时,发生错误,告诉我该方法必须是静态的,但是如果我将方法设为静态,那么我必须写接口中的实现,我无法获取单例实例。

思路好像不对。静态方法始终处于 class 级别,因此您永远不能在 Java 接口中将方法声明为静态方法(您可以在 Java 8 中这样做)。但是,这似乎是错误的设计。如果你真的想做这样的事情 -

1)Make the Interface an abstract class.
2)Create a static method called getInstance();
3)Extend the abstract class in your POJO singleton class.

希望对您有所帮助!!

您不允许在接口中使用静态方法(至少在 Java 8 之前不允许)。不允许这样的事情:

MyInterface var = new MyImplementingClass();
var.staticMethod();

只需删除接口并对静态方法所在的 class 执行静态方法调用。

搜索一下 singleton pattern - 'standard' 方法涉及 classes 而不是接口,因此请重新考虑您的设计。

您当前的界面方法存在缺陷。默认情况下,接口中的所有方法(直到 Java 8)都是静态的,并且在实现 class.

中由实例方法实现

这意味着,这不是一个选项。毕竟,您需要 运行 创建实例的方法,也就是说,您还没有实例,因此您没有实例可以调用它。

将相同的静态方法放在您扩展的抽象 class 中也不是解决方案:超级 class 永远不应该知道它是子 class 。如果它是静态方法(它需要是),则需要将其保存在 class 本身中:抽象 class 中的静态方法可以(通过抽象的匿名实现 class) return 抽象的一个实例class,但这与subclass的实例不一样,这就是你要找的。

为了将此方法用于子class,您需要从超级class继承它。但是,它仍然是 return 超级 class 的一个实例。您需要用正确的方法覆盖 subclass 中的方法,因此最好的解决方案是直接将其添加到您的 Singleton class.