Вы можете сделать что-то с перечислимым типом.
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()
Это решение предполагает только одну часть речи на слово. Чтобы учесть такие модификаторы, как «от первого лица», «от третьего лица», «множественное число», «настоящее», «прогрессивный» и т. Д., Вы можете просто перечислить все из них - утомительная работа, но ее нужно выполнить только один раз , В качестве альтернативы, вы можете адаптировать Pattern Decorator , который конкретно учитывает необходимость динамического добавления атрибутов к объекту.
Еще одно предложение - перечислить модификаторы:
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.