我想知道是否可以从pojo通过接口调用singletonbean的方法。也许这个想法是错误的或者架构…但是如果可能的话,这就是我想要完成的,因为这是项目的架构。我注意到,当我从pojo调用getinstance()(singleton接口中的方法)时,出现了一个错误,告诉我该方法必须是静态的,但是如果我使该方法是静态的,那么我必须在接口中编写实现,并且我无法获得singleton示例。
5f0d552i1#
你目前的接口方法是有缺陷的。默认情况下,接口中的所有方法(直到Java8)都是静态的,并且由实现类中的示例方法实现。这意味着,这不是一个选择。毕竟,您需要运行这个方法来创建一个示例,也就是说,您还没有一个示例,所以您没有可以调用它的示例。在扩展的抽象类中放置相同的静态方法也不是一个解决方案:一个超级类永远不应该知道它的子类。如果它是一个静态方法(它必须是静态方法),那么您需要将它保存在类本身中:抽象类中的静态方法可以(通过抽象类的匿名实现)返回抽象类的示例,但这与您要查找的子类的示例不同。为了对子类使用这个方法,您需要从超类继承它。但是,它仍然会返回一个超类的示例。您需要用正确的方法覆盖子类中的方法,因此最好的解决方案是直接将其添加到singleton类中。
7ajki6be2#
不允许在接口中使用静态方法(至少在Java8之前是这样)。这样的事情是不允许的:
MyInterface var = new MyImplementingClass(); var.staticMethod();
只需删除接口并对静态方法所在的类执行静态方法调用。搜索一下singleton模式——标准的方式是类而不是接口,所以重新考虑一下你的设计。
44u64gxh3#
这个想法似乎是错误的。静态方法总是在类级别,因此您永远不能在java接口中将方法声明为静态的(您可以在Java8中这样做)。然而,这似乎是错误的设计。如果你真的想做这样的事-
1)Make the Interface an abstract class. 2)Create a static method called getInstance(); 3)Extend the abstract class in your POJO singleton class.
希望这有帮助!!
3条答案
按热度按时间5f0d552i1#
你目前的接口方法是有缺陷的。默认情况下,接口中的所有方法(直到Java8)都是静态的,并且由实现类中的示例方法实现。
这意味着,这不是一个选择。毕竟,您需要运行这个方法来创建一个示例,也就是说,您还没有一个示例,所以您没有可以调用它的示例。
在扩展的抽象类中放置相同的静态方法也不是一个解决方案:一个超级类永远不应该知道它的子类。如果它是一个静态方法(它必须是静态方法),那么您需要将它保存在类本身中:抽象类中的静态方法可以(通过抽象类的匿名实现)返回抽象类的示例,但这与您要查找的子类的示例不同。
为了对子类使用这个方法,您需要从超类继承它。但是,它仍然会返回一个超类的示例。您需要用正确的方法覆盖子类中的方法,因此最好的解决方案是直接将其添加到singleton类中。
7ajki6be2#
不允许在接口中使用静态方法(至少在Java8之前是这样)。这样的事情是不允许的:
只需删除接口并对静态方法所在的类执行静态方法调用。
搜索一下singleton模式——标准的方式是类而不是接口,所以重新考虑一下你的设计。
44u64gxh3#
这个想法似乎是错误的。静态方法总是在类级别,因此您永远不能在java接口中将方法声明为静态的(您可以在Java8中这样做)。然而,这似乎是错误的设计。如果你真的想做这样的事-
希望这有帮助!!