2012-11-28 49 views
1

我試圖在枚舉中實現抽象方法,如下代碼,但Eclipse強調.getUrls方法並顯示工具提示「此方法需要一個身體而不是一個分號,兩個快速修復:(添加主體,添加'抽象'修飾符)「,其中沒有一個對我有意義。在Java中的重寫抽象方法中的代碼問題枚舉

該方法本身只是一個在其他類中工作的普通方法。

我在做什麼錯了?

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(); 
    } 
} 
+1

在'number'前面有什麼'int'? – Jesper

回答

4

一個問題是,下面一行在語法上不正確的:

ArrayList<String> urlList = urlManager.getUrls(int number); 
               ^^^^^^^^^^ HERE 

的另一個問題是,你不能訪問非 - staticSite的成員從PORTAL1。您或者需要製作UrlManagerstatic,或者每個Site子類都有其自己的實例UrlManager

+0

這不是唯一的問題。 – assylias

+0

這是造成錯誤被問到的人,雖然... :) – cHao

-1

由於枚舉類未聲明抽象的,甚至可能不希望被叫做抽象,做:

public void method() { 
    } 

非抽象類不能有一個抽象方法。

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(); 
    } 
} 
0

你有一些不正確的語法事情:

urlManager.getUrls(int number); 

你是那種聲明一個變量,你應該傳遞一個參數。另外,urlManager在哪裏申報?