我正在尝试在枚举中实现一个抽象方法,如下面的代码所示,但 Eclipse 在 .getUrls 方法下划线并显示工具提示"此方法需要正文而不是分号,两个快速修复:(添加正文,添加'抽象'修饰符)",这些对我来说都没有意义。
该方法本身只是在其他类中工作的普通方法。
我做错了什么?
public enum Site {
PORTAL1 ("http://www.somedomain.net") {
@Override
public void method() {
ArrayList<String> urlList = urlManager.getUrls(int number);
}
};
// more values
public abstract void method();
private final String baseUrl;
private UrlManager urlManager;
private Site(final String baseUrl) {
this.baseUrl = baseUrl;
urlManager = new UrlManager();
}
}
一个问题是以下行在语法上无效:
ArrayList<String> urlList = urlManager.getUrls(int number);
^^^^^^^^^^ HERE
另一个问题是您无法从PORTAL1
访问Site
的非static
成员。你要么需要制作UrlManager
static
,要么让每个Site
子类都有自己的UrlManager
实例。
除了明显的int number
问题,你不能从枚举实例中引用urlManager
。您可以对其进行保护,以便可以从每个实例访问它:
public enum Site {
PORTAL1("http://www.somedomain.net") {
@Override
public void method() {
ArrayList<String> urlList = urlManager.getUrls(5);
}
};
// more values
public abstract void method();
private final String baseUrl;
protected UrlManager urlManager;
private Site(final String baseUrl) {
this.baseUrl = baseUrl;
urlManager = new UrlManager();
}
}
你有一些不正确的语法:
urlManager.getUrls(int number);
你正在声明一个变量,你应该在其中传递一个参数。另外,在哪里申报urlManager
?
由于枚举类没有被声明为抽象的,甚至可能不想被称为抽象的,所以执行以下操作:
public void method() {
}
非抽象类不能有抽象方法。