java - 包含并执行外部类

时间:2013-11-30 03:11:13

标签: java class external

这与BrainF * ck无关。请参阅最后一节的“终极”问题。

我非常抱歉,如果以前曾经问过这个问题,但是我找不到以前曾经问过的页面。

我基本上设置了一个java项目,让你编写BrainF*ck代码然后执行它。对于那些不知道的人,BrainF * ck是一种非常简单的编程语言,只使用一个字符的命令。

我已将其设置为所有已实现的字母都具有扩展到Token超类的单个类。

public abstract class Token {

    private final char token;

    public Token(char c) {
        this.token = c;
    }

    public final char getToken() {
        return token;
    }

    public abstract void tokenCalled();
}

举个例子,对于Token'+',我会设置这样的类。

public class PlusToken extends Token {

    public PlusToken() {
        super('+');
    }

    @Override
    public void tokenCalled() {
        //increment value by 1
    }
}

这一切都非常好。

现在,对于我的项目,我希望用户能够创建自己的类并将它们放在一个预先存在的文件夹中,我的程序将遍历这些类并将这些标记包含在我的项目。我有一个包含所有令牌的arraylist设置,所以我唯一的问题是: 我如何读取这些类,检查它们是否是Token的实例并将其保存在我的arraylist中以供使用它们?

1 个答案:

答案 0 :(得分:0)

这是关于Java的反思。搜索关键字:“java反映所有子类”,你会发现很多。

How do you find all subclasses of a given class in Java?

“ClassPathScanningCandidateComponentProvider”答案可能符合您的需求。

但在我看来,有更简单的单词。像下面这样的事情可以简单地完成这项工作:

public abstract class Token {

    public static HashMap<Character, Class<Token>> all = new HashMap<Character, Class<Token>>();

    private final char token;

    public Token(char c) {
        this.token = c;
        all.put(c, this.getClass());
    }

    public final char getToken() {
        return token;
    }

    public abstract void tokenCalled();
}