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



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

你有一些不正确的语法:

urlManager.getUrls(int number);

你正在声明一个变量,你应该在其中传递一个参数。另外,在哪里申报urlManager

由于枚举类没有被声明为抽象的,甚至可能不想被称为抽象的,所以执行以下操作:

public void method() {
    }

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

最新更新