我有一些数据结构需要字母作为其构造函数的参数。因此,如果我创建它的新实例,我将需要每次提供一个字母表。
有更简单的方法吗? 我认为我可以通过使用静态实用程序类来解释它,比如这个
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);
答案 0 :(得分:3)
听起来我应该有一个界面。提供一些您自己的实现(可能是枚举),而另一个开发人员仍然可以创建自己的实现。使用此字母表的方法应该接受一个接口(而不是你的枚举)。
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);
这是你在找什么?