是否有可能在java ???
中的接口内部有一个内部类答案 0 :(得分:3)
你可以。但这是O'Reilly所说的:
Java支持接口中嵌套类的概念。语法和动态就像在类中声明的嵌套类一样工作。但是,声明嵌套在接口内的类将是非常糟糕的编程。接口是概念的抽象,而不是概念的实现。因此,实现细节应该省略接口。请记住,仅仅因为你可以用锯切断你的手并不意味着它是一个特别好的主意。
那就是说,我可以看到嵌套在接口中的静态实用程序类的参数。虽然为什么它需要嵌套到界面而不是一个独立的类是完全主观的。
答案 1 :(得分:2)
我同意这通常很少见,但我确实喜欢在接口方法需要返回多条信息时在接口中使用内部类,因为它实际上是合同的一部分而不是实现。例如:
public interface ComplexOperationService {
ComplexOperationResponse doComplexOperation( String param1, Object param2 );
public static class ComplexOperationResponse {
public int completionCode;
public String completionMessage;
public List<Object> data;
// Or use private members & getters if you like...
}
}
显然,这也可以在一个单独的类中完成,但对我来说,感觉就像是将接口定义的整个API保存在一个位置,而不是分散开来。
答案 2 :(得分:1)
是的,这是可能的,但这不常见。
interface Test
{
class Inner
{ }
}
class TestImpl implements Test
{
public static void main(String[] arg)
{
Inner inner = new Inner();
}
}
答案 3 :(得分:1)
不直接回答您的问题,但在相关说明中,您还可以将界面嵌套在另一个界面中。这是可以接受的,特别是如果您想提供视图。 Java的集合类执行此操作,例如Map.java
视图中的Map.Entry
:
public interface Map<K,V> {
...
public static interface Entry<K,V> {
....
}
}
这是可以接受的,因为您没有将实现细节混合到您的界面中。你只是指定了另一份合同。
答案 4 :(得分:0)
答案 5 :(得分:0)
我觉得非常有用的一个用例是,如果你有一个构建器来创建一个Interface实例。如果构建器是Interface的静态成员,则可以创建如下实例:
DigitalObject o = new DigitalObject.Builder(content).title(name).build();
答案 6 :(得分:0)
这是合法的,但我只是使用嵌套接口(如前所述)或嵌套枚举来实现它。例如:
public interface MyInterface {
public enum Type { ONE, TWO, THREE }
public Type getType();
public enum Status { GOOD, BAD, UNKNOWN }
public Status getStatus();
}