【发布时间】:2014-02-02 21:18:54
【问题描述】:
Java 允许我定义本地抽象类,如下例所示:
public class Foo {
public void foo() {
abstract class Bar { // Bar is a local class in foo() ...
abstract void bar();
}
new Bar() { // ... and can be anonymously instantiated
void bar() {
System.out.println("Bar!");
}
}.bar();
}
}
由于某种原因,当我尝试定义“本地接口”而不是本地类时,如下所示:
public class Foo {
public void foo() {
interface Bar { // Bar was supposed to be a local interface...
void bar();
}
new Bar() { // ... to be anonymously instantiated
void bar() {
System.out.println("Bar!");
}
}.bar();
}
}
Java 抱怨“成员接口 Bar 只能在顶级类或接口中定义”。是否有一个原因?还是我错过了我犯的错误?
【问题讨论】:
-
为什么本地抽象类不能完成这项工作?
-
@TedHopp 确实如此。界面将简单地“更清洁”(在我看来)。在我的实际代码中使用本地类的唯一原因是让它实现另外两个接口(参见stackoverflow.com/questions/21515693/…)。
-
哇,我不知道甚至可以在方法中定义本地类。我只是好奇,有人知道这个构造实际上有用的一些真实示例吗?
-
@JakubJirutka 我为此使用它们:stackoverflow.com/questions/21515693/…
-
我认为您在限制界面范围方面过于努力。只需让它成为班级的私人成员。这不是糟糕的设计。
标签: java interface local-class