Java程序组织:如何摆脱这种大规模的案例陈述?
发布时间:2020-12-15 05:22:26 所属栏目:Java 来源:网络整理
导读:我正在创建一个将填写给定语法的程序.现在我正在模拟像这样的“各种单词”: public class WordDescriptor { public static final String noun = "N"; public static final String plural = "p"; public static final String nounPhrase = "h"; public stati
我正在创建一个将填写给定语法的程序.现在我正在模拟像这样的“各种单词”:
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,带有子类: > class noun,带子类: >单数 >类动词 但我不确定这是否也是一个好主意.我怎么能更好呢? 编辑:如果我采取了第二种方法,我甚至不确定这些类会是什么样子.这是一个例子: 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"; } } 解决方法
您可以使用枚举类型执行某些操作.
public enum SpeechPart { NOUN ("noun"),PLURAL ("plural"),NOUNPHRASE ("noun phrase"),ADVERB ("adverb"),ADJECTIVE ("adjective"),CONJUNCTION ("conjunction"),VERB ("verb"); private String english; SpeechPart(String inEnglish) { this.english = inEnglish; } public String toString() { return english; } } 您现在可以将这些分配给变量. SpeechPart dog = SpeechPart.NOUN; SpeechPart ran = SpeechPart.VERB; SpeechPart quickly = SpeechPart.ADVERB; 然后你可以看到他们的演讲内容是什么: System.out.println(dog.toString()); System.out.println(quickly); // Implicit call to toString() 该解决方案假设每个单词只有一个词性.为了允许修饰语,例如“第一人称”,“第三人称”,“复数”,“现在”,“进步”等,你可以简单地列举所有修饰符 – 这是一项繁琐的工作,但只需要进行一次.或者,您可以调整Decorator Pattern,它特别针对动态添加属性的需要. 另一个建议是枚举修饰符: public enum SpeechModifier { SINGULAR,PLURAL,FIRST_PERSON,SECOND_PERSON,THIRD_PERSON,PRESENT,PAST,PERFECT,PROGRESSIVE; } 然后构建一个将它们组合在一起的类: public class Word { String word; SpeechPart part; EnumSet<SpeechModifier> modifiers; } 现在你可以模拟整个单词: Word w1 = new Word(); w1.word = "bouncing"; w1.part = SpeechPart.VERB; w1.modifiers = EnumSet<SpeechModifier>.of(SpeechModifier.PRESENT,SpeechModifier.PROGRESSIVE); 然而,该解决方案不能防止非感性组合,例如FIRST_PERSON NOUN PAST. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- java – 从集合中删除“第一个”对象
- java – Xpages:managedBean经常“丢失”全局Domino Sessi
- java.lang.NoClassDefFoundError:org / springframework /
- java – ThreadLocal是否可以安全地与Tomcat NIO Connector
- java – 在JUnit测试的上下文中使用OSGi声明性服务
- java – 了解合并排序的工作原理
- Java中的添加顺序
- 一起读源码之zookeeper(1) -- 启动分析
- java – NumberFormat setMaximumFractionDigits方法
- 如何学习Threads,特别是在Java中