我正在创建一个程序来填充给定的语法。现在我正在对“词类”进行建模,如下所示:
public class WordDescriptor {
public static final String noun = "N";
public static final String plural = "p";
public static final String nounPhrase = "h";
public static final String usuParticipleVerb = "V";
public static final String transitiveVerb = "t";
public static final String intransitiveVerb = "i";
public static final String adjective = "A";
public static final String adverb = "v";
public static final String conjunction = "C";
public static final String preposition = "P";
public static final String interjection = "!";
public static final String pronoun = "r";
public static final String definiteArticle = "D";
public static final String indefiniteArticle = "I";
public static final String nominative = "o";
public static final String defaultTag = "?";
private String word; // where word is one of the constants defined above.
public String getWord(){
return word;
}
public String setWord(){
return word;
}
/** For debugging only.
*
* @param s
* @return
*/
protected static String getKind(String s){
if(s.equals(noun)){
return "noun";
}else if(s.equals(plural)){
return "plural";
}else if(s.equals(nounPhrase)){
return "nounPhrase";
}else if(s.equals(usuParticipleVerb)){
return "usuParticipleVerb";
}else if(s.equals(transitiveVerb)){
return "transitiveVerb";
}else if(s.equals(intransitiveVerb)){
return "intransitiveVerb";
}else if(s.equals(adjective)){
return "adjective";
}else if(s.equals(adverb)){
return "adverb";
}else if(s.equals(conjunction)){
return "conjunction";
}else if(s.equals(preposition)){
return "preposition";
}else if(s.equals(interjection)){
return "interjection";
}else if(s.equals(pronoun)){
return "pronoun";
}else if(s.equals(definiteArticle)){
return "definiteArticle";
}else if(s.equals(indefiniteArticle)){
return "indefiniteArticle";
}else if(s.equals(nominative)){
return "nominative";
} else if(s.equals(defaultTag)){
return "defaultTag";
}else{
return "other: "+s;
}
}
}
这几乎是我能想象到的最丑陋的代码。我知道我可以通过使用 case 语句让它变得更好一点,但这仍然很难看。这是我的问题:
怎样才能让它变美?我在考虑制作:
- 类 WordDescriptor,具有子类:
- 类名词,有子类:
- 单数
- 复数
- 类动词
- 类副词
- 类名词,有子类:
但我也不确定这是否是个好主意。我怎样才能更好地解决这个问题?
编辑:如果我确实采用了第二种方法,我什至不确定这些类会是什么样子。这是一个例子:
public abstract class WordDescriptor {
public String toString();
}
public class Noun extends WordDescriptor {
public String toString(){
return "Noun";
}
}
public class Plural extends Noun{
public String toString(){
return "Plural";
}
}
最佳答案
我只想创建一个字典或从缩写到完整描述的映射。然后 getKind
将在映射中查找其输入并返回结果,如果输入未映射到任何内容,则返回 other
。
关于Java程序组织: How can I get rid of this massive case statement?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3220716/