我想知道是否可以通过其接口从POJO调用单例bean的方法。也许这个想法是错误的或者是架构...但是如果可能的话,这就是我想要完成的,因为这是项目的架构。 我注意到当我从POJO调用getInstance()(来自单例的接口的方法)时,发生了一个错误,告诉我该方法必须是静态的,但如果我使方法静态,那么我必须写接口中的实现,我无法得到单例实例。
答案 0 :(得分:2)
您当前使用界面的方法存在缺陷。默认情况下,接口中的所有方法(直到Java 8)都是静态的,并且由实现类中的实例方法实现。
这意味着,这不是一个选择。毕竟,您需要运行该方法来创建一个实例,这意味着您还没有实例,所以您没有实例可以调用它。
将相同的静态方法放在您扩展的抽象类中也不是解决方案:超类不应该知道它的子类。如果它是一个静态方法(它需要),你需要将它保存在类本身中:抽象类中的静态方法可以(通过抽象类的匿名实现)返回抽象类的实例,但这与子类的实例不同,这正是您要寻找的。 p>
为了将此方法用于子类,您需要从超类继承它。但是,它仍将返回超类的实例。您需要用正确的方法覆盖子类中的方法,因此最好的解决方案是将它直接添加到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.
希望这会有所帮助!!