Java 标识扩展抽象类的类

Java 标识扩展抽象类的类,java,Java,晚上好, 我正在对进行一次主要的重构,以最终获得更好的概述和可维护性。(当我决定开始编程时,我开始了这个项目,所以–你明白了,对吗?;) 目前,我想知道如何解决我现在要描述的问题: 每个文件都将经过几个解析器(比如一个用于链接,一个用于表格,一个用于图像等): 然后将按照以下方式解析文件: public class WikiFile { ... public void parse() { //Run all parsers on this file. if (!parse) re

晚上好,

我正在对进行一次主要的重构,以最终获得更好的概述和可维护性。(当我决定开始编程时,我开始了这个项目,所以–你明白了,对吗?;)

目前,我想知道如何解决我现在要描述的问题:

每个文件都将经过几个解析器(比如一个用于链接,一个用于表格,一个用于图像等):

然后将按照以下方式解析文件:

public class WikiFile {
...
public void parse() {
    //Run all parsers on this file.
    if (!parse) return;
    WikiTask task = new WikiLinks();
    do {
        task.parse(this);
    } while ((task = task.nextTask()) != null);
}
}
有时我可能根本不想使用解析器(对于只需要复制的文件),或者只想选择一个解析器(例如,用于测试目的)。因此,在运行task.parse()之前,我需要检查这个特定的解析器是否确实需要。(可能通过黑名单或白名单。)


你有什么比较的建议?每个WikiTask的ID(如何执行?)?将任务对象本身与WikiTask的新实例进行比较(开销)?

很抱歉,我不太了解您的解析函数。如果不想使用解析器,请将parse设置为false?:)
如果我试着猜你想要什么…我会简单地使用枚举。您的任务可以包含
ParserType类型
你肯定需要使用一个列表,如果你想为某个任务使用不同的解析器。注意。

是的,根本不需要解析。仅运行某些解析器还不能解决问题。-很抱歉不清楚,我上面描述的parse()函数不是WikiTask的一部分,而是文件对象的一部分。在WikiFile对象上调用parse()会运行所有可用的解析器,只要还有下一个解析器(我使用
task.nextTask()
,因为顺序很重要)使用枚举识别解析器可能是最简单的方法,因为它们也是轻量级的。
public class WikiFile {
...
public void parse() {
    //Run all parsers on this file.
    if (!parse) return;
    WikiTask task = new WikiLinks();
    do {
        task.parse(this);
    } while ((task = task.nextTask()) != null);
}
}