在接口内部编写类的用途是什么?

14

我在Java论坛中找到了以下示例。

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

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

我的问题是拥有这样的类有什么用处?这是任何设计模式吗?


2
即使这段代码可以编译通过,也不是任何人都应该这样做的。 - memo
4
@备忘录 - 我不同意。有时这样做是正确的事情。 - Stephen C
6
“它正在成功编译” 不,它没有。如果你从 public int Role id; 中删掉 int 的话,它就会成功编译。 - T.J. Crowder
3
没有对设计原则的“违法行为”。设计原则是原则,不是法律,任何将其视为“明文法律”的人都没有理解其要点。 - Stephen C
1
如果你想要一个例子,可以看看java.util.Map的API。 - Stephen C
显示剩余10条评论
6个回答

9
这段代码已经在某种程度上回答了你的问题。类 Roleemployee 接口中的 getRole() 方法使用。接口的设计者决定这个类与接口耦合紧密,值得在该接口内定义它,以强调该类对于接口的重要性。
此外,它为这个类提供了语义化的名称空间:employee.Role。然而,我第一次看到这种构造,虽然在其他类中定义静态类是很常见的(出于同样的目的)。

4
这里的用法与任何内部类相同。它将类的作用范围限制在其所属的位置。
在这种情况下,实现者认为 Role 不适合作为顶级类,并将其放置在 employee 接口内部。这样做的原因很可能是因为 Role 的意图是与 employee 紧密耦合。

1
该类提供了接口的重要部分:用于getRole方法的返回值。因此,在接口内定义该类是有意义的。
通常情况下,为了在实现接口时更加灵活,会在接口内部定义一个接口来处理这种情况(例如java.util中的Map.Entry),但也可以定义一个类来实现。
注:该文本为IT相关内容。

1

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

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

Role getRole();
}

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


0
我不会写这样的代码,但我认为使用它是为了强调类和接口之间的依赖关系。
接口用于定义API,在这种情况下,作者可能想表达“这两者不能分开存在”。
希望这可以帮到你。

0
我不会写这样一段代码,但我认为使用它是为了强调类和接口之间的依赖关系。
接口用于定义API,在这种情况下,作者可能想表达的是“这两者不能分开存在”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接