我正在尝试在枚举中实现一个抽象方法,如下面的代码所示,但Eclipse正在强调.getUrls方法并显示工具提示“此方法需要一个正文而不是一个分号,两个快速修复:(添加正文) ,添加'abstract'修饰符)“,其中没有一个对我有意义。
该方法本身只是一种适用于其他类的常规方法。
我做错了什么?
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();
}
}
答案 0 :(得分:4)
一个问题是以下行在语法上无效:
ArrayList<String> urlList = urlManager.getUrls(int number);
^^^^^^^^^^ HERE
另一个问题是,您无法从static
访问Site
的非PORTAL1
成员。您需要制作UrlManager
static
,或让每个Site
子类都有自己的UrlManager
实例。
答案 1 :(得分:2)
除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();
}
}
答案 2 :(得分:0)
您的语法不正确:
urlManager.getUrls(int number);
你有点声明一个你应该传递参数的变量。此外,urlManager
声明在哪里?
答案 3 :(得分:-1)
由于enum类未被声明为abstract,甚至可能不想被称为abstract,请执行:
public void method() {
}
非抽象类不能有抽象方法。