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

时间:2015-04-28 12:07:57

标签: java methods interface singleton instance

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

3 个答案:

答案 0 :(得分:2)

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

这意味着,这不是一个选择。毕竟,您需要运行该方法来创建一个实例,这意味着您还没有实例,所以您没有实例可以调用它。

将相同的静态方法放在您扩展的抽象类中也不是解决方案:超类不应该知道它的子类。如果它是一个静态方法(它需要),你需要将它保存在类本身中:抽象类中的静态方法可以(通过抽象类的匿名实现)返回抽象类的实例,但这与子类的实例不同,这正是您要寻找的。

为了将此方法用于子类,您需要从超类继承它。但是,它仍将返回超类的实例。您需要用正确的方法覆盖子类中的方法,因此最好的解决方案是将它直接添加到Singleton类中。

答案 1 :(得分:1)

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

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

只需删除接口,然后对静态方法所在的类进行静态方法调用。

搜索singleton pattern - '标准'这样做的方法涉及类而不是接口,所以重新考虑你的设计。

答案 2 :(得分:-1)

这个想法似乎是错误的。静态方法总是在类级别,因此您永远不能在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.

希望这会有所帮助!!