我有一个正在处理将各种消息打印到控制台的类,让我们调用这个类ConsoleMessages.java。这个类是公共的和抽象的,它的所有方法都是公共的和静态的。
我想创建一个这个类的接口(让我们称之为PrintMessages)。我的意思是,ConsoleMessages.java将实现PrintMessages。
问题是,JAVA不支持接口中的静态方法。
你建议我做什么?
答案 0 :(得分:3)
使用您想要的方法创建PrintMessages
界面。
使ConsoleMessages
成为实现该接口的类。将所有方法从静态更改为非静态。
将ConsoleMessages
实例化强制为singleton。这可以通过多种方式实现,无论是自己动手还是使用Dependency Injection framework。
答案 1 :(得分:1)
在界面中对静态方法确实没有强烈的争论。什么都不会发生。
接口可以有静态字段和静态成员类,因此可以通过它们附加静态方法,尽管有一个额外的间接。
interface MyService
static public class Factory
static public MyService get(...)
return ...;
MyService service = MyService.Factory.get(args);
答案 2 :(得分:0)
如果您发现自己需要在实用程序类上定义接口,那么可能是时候重新审视您的设计选择了。您的ConsoleMessages类似乎已经超出其最初用作“常用实用程序功能”的转储基础。
简短回答?重构时间。
答案 3 :(得分:0)
接口用于指定对象的方法(然后由某些类实现)。这里没有对象,因此您不需要任何接口。
静态方法只能使用确切的类名称(或者某个子类的名称)来调用,使用接口执行此操作没有意义。
所以,你有两个选择: