[英]Issues with code in overriden abstract method in Java enum
我正在嘗試在枚舉中實現一個抽象方法,如下面的代碼所示,但 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();
}
}
由於枚舉類未聲明為抽象類,甚至可能不想被稱為抽象類,請執行以下操作:
public void method() {
}
非抽象類不能有抽象方法。
你有一些不正確的語法:
urlManager.getUrls(int number);
您有點聲明一個變量,您應該在其中傳遞參數。 另外, urlManager
在哪里聲明?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.