我今天在工作中遇到了一些Java代码:
public interface A {
public static interface AObj {
String toXml();
int getCode();
}
public static interface AMap {
String toXml();
int blah();
}
...
}
之前我没有遇到嵌入现有接口的静态接口。这没有多大意义。有人可以发表评论:
a)这是一个很好的设计实践 b)与具有单独的接口文件相比,这有什么好处。 c)这是由c ++程序员编写的,我得到的印象是他们正在尝试重新创建名称空间。如果是这种情况,为什么不直接使用包?
欢迎任何评论。
此致 阿利斯泰尔。
答案 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所述那样输入public
或static
(请参阅注释)。关于内部接口:一切都取决于它们的使用环境 - 例如,GWT需要公开描述单元列表的应用程序样式的接口。我有一个用于通用设备的接口,以及用于某些特定设备(android,iphone等)的内部接口。在我看来,它不那么混乱,尤其是特定设备的所有这些接口都包含一种覆盖默认行为的方法。
但是,如果接口不像上面提到的例子那么紧密耦合,我宁愿把它们放在一个单独的文件中。当然,根据设计,这是您的选择。