我在一个java论坛中找到了以下示例。
interface employee{
class Role{
public String rollname;
public int roleId;
public Object person;
}
Role getRole();
// other methods
}
我已经执行了上面的代码片段并且正在成功编译。 这意味着我们可以在界面中拥有一个类。
我的问题是拥有这些课程的用途是什么?是任何设计模式吗?
答案 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,在这种情况下,作者可能想说“这两者不能分开”。