2010-03-21 37 views

回答

2

首先,因为它没有意义。静态接口如何与非静态接口不同?

第二,他们可以:

public class SomeClass { 
    static interface StaticInterface { 
    } 
} 
6

认为像蓝图的接口。这没什么具体的。只要坚持(继承)接口,就能实现一个类必须实现的蓝图。 (iirc)本身没有“静态”类的概念,即“静态”不是类声明中的关键字,就像它在C#中一样。相反,静态类是只由静态成员和方法组成的类。

如您所知,静态成员和静态方法属于类,而不属于实例。

由于接口只是一个蓝图,而不是具体的,所以“静态”接口是没有意义的。

对此的一个警告是内部类。

在一个类声明中,你可以定义一个静态的接口,但我认为它什么都不做。

+0

+1好解释。但是,“我认为它什么都不做”是什么意思? – helpermethod 2010-03-21 10:32:04

2

如果你指的是接口本身:因为没有真正有用的东西,你可以用static interface

意味着如果你的意思接口方法:因为在Java中,静态方法是一类的属性,不能被覆盖或多态地调用。

0

Actualy,我看到在接口某种意义上无法实现(特别是之前在Java 5中引入枚举):

public static (or better final?) interface Colors { 
    public final int RED = 1; 
    public final int GREEN = 2; 
    ... 
} 

如果有人知道为什么这些事情不应该这样做(假设我们仍然在java_1.4中),请发表评论。

+1

我认为接口更多的是行为而不是数据。如果没有枚举,我会将这个(静态)数据移动到一个类中。 – spa 2010-03-21 10:12:22

+0

这就是“恒定接口反模式”。 – whiskeysierra 2010-03-21 10:32:15

+0

这实际上被称为常量接口反模式(请参阅Wikipedia以供参考)。另一种方法是使用具体类(私有构造函数)。 – helpermethod 2010-03-21 10:35:11