安全地添加新实现

时间:2015-05-22 12:19:26

标签: java list

我有接口及其实现:

public interface SyntaxConstruction{
    public String parseFromString(String str);
}
public class Copy implements SyntaxConstruction{
    public String parseFromString(String str){ //impl };
}


public class Set implements SyntaxConstruction{
    public String parseFromString(String str){ //impl };
}

我也有以下课程:

public class Parser{

    private static List<SyntaxElement> elementPrototypes; //should maintain the list of all implementation's prototypes


    static{
        //Initializing list with prtotypes of all possible SyntaxConstruction's implementations
    }
    public static List<SyntaxElement> parse(String str){ 
        //getting syntax elements from str
    }
}

现在我们添加一个新的实现,比如说

public class Values implements SyntaxConstruction{
    public String parseFromString(String str){ //impl };
}

如果添加该类的用户不更新elementPrototypes列表,则可能导致难以捕获的错误。我想让他们知道安全地更新列表吗?

1 个答案:

答案 0 :(得分:2)

你可以使用一个抽象实现,将自己(在构造函数中)“注册”到Parser的{​​{1}}中,类似于:

elementPrototypes

请注意,您还可以使用反射来“检测”public abstract class BaseSyntaxConstruction implements SyntaxConstruction { protected BaseSyntaxConstruction() { Parser.addElementPrototype(this); } } public class Copy extends BaseSyntaxConstruction { public String parseFromString(String str){ // impl } } 实现

根据您的评论,我认为您可能希望在此使用枚举来存储实现,无需实例化,无需注册(请参阅SyntaxConstruction):

values()