Java нужна помощь, чтобы проверить, является ли строка экземпляром - PullRequest
0 голосов
/ 27 января 2011

У меня есть интерфейс GenericExpression, который расширяется для создания выражений (например, AndExpression, OrExpression и т. Д.).

Каждая реализация GenericExpression имеет строку, которая ее представляет (т. Е. «&», «+» И т. Д.) (Хранится в виде статической переменной «stringRep»)

Есть ли способ взять строку ввода пользователя и проверить, представляет ли она выражение GenericExpression?

Если нет (кажется вероятным, что это так), есть ли способ добиться подобного эффекта с измененным дизайном?

Спасибо!

РЕДАКТИРОВАТЬ: предложено чуть более подробно выше.

Кроме того, конечная цель - иметь возможность произвольно реализовать GenericExpression и по-прежнему проверять, представляет ли строка экземпляр одного из ее подклассов. Таким образом, я не могу просто сохранить карту реализации - пары представления строк, потому что это сделает так, что GenericExpression больше не будет легко расширяемым.

Кроме того, это домашнее задание

1 Ответ

3 голосов
/ 27 января 2011

Ну, я думаю, вам нужно будет где-то определить, какие выражения поддерживаются вашей программой. Я думаю, что лучший способ - это использовать map , где вы сопоставляете свой интерфейс со строками. Таким образом, вы можете легко найти выражение с его представляющей строкой. Где вы будете определять эту карту, зависит от вашего дизайна. Одна возможность - это статический метод в вспомогательном классе, который разрешает выражения в строку типа:

Expressions.get("&").invoke(true, false);

Где get - это статический метод в Expressions, который ищет нужное выражение в статической карте. Вам придется инициализировать эту карту в статическом инициализаторе или позволить экземплярам выражения добавлять себя при создании.

EDIT: (Я хотел прокомментировать это в ответе, но он, кажется, удален) Лично мне не нравится идея регистрации классов. Это дает мне ощущение отсутствия контроля над моим кодом. Я бы предпочел создавать экземпляры классов в самом классе Expressions. В любом случае код для регистрации класса должен быть написан для каждого нового подкласса. Я предпочитаю централизовать этот код в одном классе, поэтому, если я хочу изменить логику или рефакторинг, мне нужно коснуться только одного класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...