【问题标题】:what is the use of writing a class inside an interface在接口中编写类有什么用
【发布时间】:2023-03-13 06:59:01
【问题描述】:

我在某个 java 论坛中找到了以下示例。

interface employee{
    class Role{
          public String rollname;
          public int roleId;
          public Object person;
     }
    Role getRole();
    // other methods
}

上面的代码我已经执行了sn-p,编译成功了。 这意味着我们可以在接口中拥有一个类。

我的问题是开设这样的课程有什么用?它是任何设计模式吗?

【问题讨论】:

  • 就算这样编译,也不是任何人都应该做的事情。
  • inner class within Interface 的可能重复项
  • @memo - 我不同意。在某些情况下,这样做是正确的。
  • "...正在编译成功" 不,不是。如果你从public int Role id; 中删除int,它会发生。
  • 没有这样的东西反对“犯罪”反对设计原则。设计原则是原则,而不是法律,任何将它们视为“黑字法”的人都没有抓住重点。

标签: java class interface


【解决方案1】:

这段代码 sn-p 已经回答了你的问题。 employee 接口在getRole() 方法中使用类Role。接口的设计者认为这个类与接口的耦合非常紧密,因此值得在接口内部定义它,以强调该类对接口的重要性。

它还为类提供语义命名空间:employee.Role。但是我第一次看到这种构造,而在其他类中定义的静态类很常见(出于与上述相同的目的)。

【讨论】:

    【解决方案2】:

    这里的用法与任何内部类相同。它将类的范围限制在它所属的位置。

    在这种情况下,实现者认为Role 不适合作为顶级类,并将其放在employee 接口中。造成这种情况的原因很可能是Role 的意图是与employee 紧密耦合。

    【讨论】:

      【解决方案3】:

      该类提供了接口的一个重要部分:getRole 的返回值。所以在接口中定义类是有意义的。

      在接口中为这类事情定义一个 interface 会更常见一些(如java.util 中的Map.Entry),以便在实现接口时提供更大的灵活性,但是你也可以上课。

      【讨论】:

        【解决方案4】:

        您的示例存在轻微的编译问题,我已在下面修复:

        public interface Employee {
        class Role{
              public String rollname;
              public int roleId;
              public Object person;
            }
        
        Role getRole();
        }
        

        除此之外,是的,它可以编译。这并不意味着这样做是个好主意。这是为Role 类命名空间的另一种方式,但我认为它相当丑陋。

        【讨论】:

          【解决方案5】:

          这样的代码我不会写,但我觉得用处是为了强调类和接口之间的依赖关系。

          接口用于定义API,在这种情况下,作者可能想说“这两者不能分开”。

          希望这会有所帮助。

          【讨论】:

            【解决方案6】:

            这样的代码我不会写,但我觉得用处是为了强调类和接口之间的依赖关系。

            接口用于定义API,在这种情况下,作者可能想说“这两者不能分开”。

            【讨论】:

              猜你喜欢
              • 2021-07-31
              • 2016-10-27
              • 1970-01-01
              • 2011-06-06
              • 2011-08-21
              • 1970-01-01
              • 2018-01-06
              • 2010-11-04
              • 2016-06-19
              相关资源
              最近更新 更多