在接口中编写类有什么用?

时间:2012-05-11 14:36:59

标签: java class interface

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

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

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

我的问题是拥有这些课程的用途是什么?是任何设计模式吗?

6 个答案:

答案 0 :(得分:9)

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

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

答案 1 :(得分:4)

此处的使用与任何内部类相同。它将类的范围限制在它所属的位置。

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

答案 2 :(得分:1)

该类提供了界面的重要部分:getRole的返回值。因此,在界面中定义类是有意义的。

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

答案 3 :(得分:1)

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

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

Role getRole();
}

除此之外,是的,它编译。这并不意味着这样做是个好主意。这是你的Role课程名称间距的另一种方式,但我觉得它很难看。

答案 4 :(得分:0)

我不会编写这样的代码,但我认为使用的是强调类和接口之间的依赖关系。

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

希望这有帮助。

答案 5 :(得分:0)

我不会编写这样的代码,但我认为使用的是强调类和接口之间的依赖关系。

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