【问题标题】:Why does Java allow nested class definitions in an interface?为什么 Java 允许在接口中嵌套类定义?
【发布时间】:2014-04-07 16:09:38
【问题描述】:

我实际上想知道从 OO/Acrhitectural/Structural 的角度来看,接口中的类何时会有益?

为什么 Java 允许这样做?

【问题讨论】:

  • 其实也有人问为什么没有个限制。 (答案是一样的:这正是 Java 决定的方式。)
  • @Radiodef 当然,但我实际上正在寻找一个知道该决定背后原因的人(我知道这不太可能,除非他是 Java 开发人员/设计师),或者一个案例他/她在哪里使用它并且它是有益的。

标签: java oop architecture


【解决方案1】:

根据我在“Thinking in Java”中的记忆,B. Eckel 将其展示为可用于通过一些静态方法放置在接口类中的残留物,例如测试接口的正确实现

interface SomeList<T>{
    T get(int i);
    void add(T t);
    int size();

    class FewTests{
        //some very bad test, but remember that this is just example
        static <T> boolean simpleTest1(SomeList<T> list, T t){
            int before = list.size();
            list.add(t);
            return list.size() - before == 1;
        }
    }
}

【讨论】:

  • 我觉得 1 个用例可能不是包含该功能的原因,而这在 Java 8 中已过时。
  • @Radiodef 所以你认为这可能只是一个过时的功能,只是为了向后兼容(这实际上是我的信念)?
  • @Simeon 我所说的已过时是答案中的示例。 Java 8 允许在接口上使用静态方法。我有点责备 Pshemo,因为如果这是您正在寻找的答案,那么您的问题可能是题外话。这样的答案有100个。
  • @Radiodef 你说的是真的。最初我打算将其发布为评论,但我无法以良好的形式添加代码,因此决定将其发布为答案。
  • 是的,好的,我不是要打扰你。我只是不想看到这样的问题被 100 个“这是你可以使用它的一种方式”的答案轰炸,而这可能是有人知道的历史原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多