14

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

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

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

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

4

6 回答 6

9

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

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

于 2012-05-11T14:40:10.410 回答
4

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

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

于 2012-05-11T14:40:47.917 回答
1

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

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

Role getRole();
}

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

于 2012-05-11T14:49:32.183 回答
1

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

在接口中为此类事物定义接口会更常见(例如Map.Entryin java.util),以便在实现接口时具有更大的灵活性,但您也可以使用类。

于 2012-05-11T14:41:30.853 回答
0

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

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

希望这可以帮助。

于 2012-05-11T14:41:42.500 回答
0

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

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

于 2017-03-14T14:36:05.373 回答