我有一些数据结构需要字母作为其构造函数的参数。因此,如果我创建它的新实例,则每次都需要提供一个字母。

有没有更简单的方法?
我认为我可以通过使用静态实用工具类来简化它,就像这样

Alphabet {
  public static final eng = "abc...z";
  public static final ua = "абв...я";
}


但这不能保证可扩展性。我是说,可以在此类中添加一些字母,但是用户不能添加自己的字母,例如俄语俄语字母。

我可以创建实用程序类,该类使用HashMap的私有实例,其中K是coutry-code,V是字母,并支持用户的get / put方法。这样,我就可以保证扩展性。
但这不是使所有事情变得复杂吗?

编辑

假设目前我正在这样做

Structure instance = new Structure("abc...z");
//in another class
Structure instance = new Structure("abc...z");


通过实用程序类,我可以这样做

Structure instance = new Structure(Alphabet.eng);
//in another class
Structure instance = new Structure(Alphabet.eng);

最佳答案

在我看来,您应该有一个界面。提供一些您自己的实现(可能是枚举),而另一个开发人员仍可以创建自己的实现。使用该字母的方法应接受一个接口(而不是您的枚举)。

interface Alphabet {
    String characters();
}

enum KnownAlphabet implements Alphabet {
    ENG("abc...z"),
    UA("абв...я");

    private final String characters;

    KnownAlphabet(String characters) {
        this.characters = characters;
    }

    @Override
    public String characters() {
        return characters;
    }
}

class Structure {
    public Structure(Alphabet alphabet) {
        String characters = alphabet.characters();
        // do whatever you were doing with the characters before
    }
}


然后您的:

Structure instance = new Structure(Alphabet.eng);


更改为:

Structure instance = new Structure(KnownAlphabet.ENG);


这是你想要的?

08-07 05:47