簡體   English   中英

Java 枚舉中重寫抽象方法中的代碼問題

[英]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訪問Sitestatic成員。 您要么需要將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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM