Java枚举中覆盖抽象方法中的代码问题

时间:2012-11-28 14:28:05

标签: java enums abstract

我正在尝试在枚举中实现一个抽象方法,如下面的代码所示,但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();
    }
}

4 个答案:

答案 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() {
    }

非抽象类不能有抽象方法。