Java嵌入式静态接口

时间:2012-02-22 12:11:46

标签: java oop

我今天在工作中遇到了一些Java代码:

public interface A {

    public static interface AObj {
         String toXml();
         int getCode();
    }

    public static interface AMap {
         String toXml();
         int blah();
    }
    ...
}

之前我没有遇到嵌入现有接口的静态接口。这没有多大意义。有人可以发表评论:

a)这是一个很好的设计实践 b)与具有单独的接口文件相比,这有什么好处。 c)这是由c ++程序员编写的,我得到的印象是他们正在尝试重新创建名称空间。如果是这种情况,为什么不直接使用包?

欢迎任何评论。

此致 阿利斯泰尔。

2 个答案:

答案 0 :(得分:2)

好/坏的做法可能有争议。通常,如果嵌套接口是与其父接口相关的不可分离的实体,则会嵌套接口。

查看java.util.Map的源代码。它快乐地嵌入Map.Entry。作者是Josh Bloch,他绝对不是一个没有经验的Java开发人员。所以我确信在设计界面背后必须有一个有效的推理。

以下是它的样子(JavaDoc和注释被剥离)。

public interface Map<K,V> {
    int size();
    boolean isEmpty();
    boolean containsKey(Object key);
    boolean containsValue(Object value);
    V get(Object key);
    V put(K key, V value);
    V remove(Object key);
    void putAll(Map<? extends K, ? extends V> m);
    void clear();
    Set<K> keySet();
    Collection<V> values();
    Set<Map.Entry<K, V>> entrySet();

    interface Entry<K,V> {
        K getKey();
        V getValue();
        V setValue(V value);
        boolean equals(Object o);
        int hashCode();
    }

    boolean equals(Object o);
    int hashCode();
}

答案 1 :(得分:0)

首先,您不必像adarshr所述那样输入publicstatic(请参阅注释)。关于内部接口:一切都取决于它们的使用环境 - 例如,GWT需要公开描述单元列表的应用程序样式的接口。我有一个用于通用设备的接口,以及用于某些特定设备(android,iphone等)的内部接口。在我看来,它不那么混乱,尤其是特定设备的所有这些接口都包含一种覆盖默认行为的方法。

但是,如果接口不像上面提到的例子那么紧密耦合,我宁愿把它们放在一个单独的文件中。当然,根据设计,这是您的选择。