需要的建议:JAVA接口中的静态方法

时间:2011-08-01 17:46:57

标签: java interface methods static

我有一个正在处理将各种消息打印到控制台的类,让我们调用这个类ConsoleMessages.java。这个类是公共的和抽象的,它的所有方法都是公共的和静态的。

我想创建一个这个类的接口(让我们称之为PrintMessages)。我的意思是,ConsoleMessages.java将实现PrintMessages。

问题是,JAVA不支持接口中的静态方法。

你建议我做什么?

4 个答案:

答案 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)

接口用于指定对象的方法(然后由某些类实现)。这里没有对象,因此您不需要任何接口。

静态方法只能使用确切的类名称(或者某个子类的名称)来调用,使用接口执行此操作没有意义。

所以,你有两个选择:

  • 抛弃您的界面并继续使用静态方法。
  • 使所有方法(或至少应该在接口中的方法)非静态,并且您的实现类是非抽象的。要调用它们,则需要该类的对象(实现此接口)。