2011-01-27 9 views
0

GenericExpressionというインターフェースを拡張して式(つまりAndExpression、OrExpressionなど)を作成しました。Javaには文字列がインスタンスかどうかを確認する助けが必要です

各GenericExpressionの実装では、それを表す文字列を持っている(すなわち「&」、「+」など)

は、ユーザの入力文字列を取るためにどのような方法があります(静的変数「stringRep」として保存されています) GenericExpressionを表しているかどうかを確認します。

リファクタリングされたデザインで同様の効果を得る方法はありますか?

ありがとうございます!

EDIT:上記の少し詳しく説明します。

また、最終目的は任意にGenericExpressionを実装し、文字列がそのサブクラスの1つのインスタンスを表すかどうかを確認することです。したがって、GenericExpressionがもはや容易に拡張できないようにするため、実装のマップ(文字列表現のペア)を保存するだけではありません。

また、これは宿題

ある
+0

これは宿題のようです。宿題の場合は、そのようにタグ付けしてください。また、より多くの情報を提供する必要があります。まず、それぞれのGenericExpression実装には、それを表す文字列(つまり、 "&"、 "+"など)があります。 ?その文字列によってGenericExpressionが*接頭辞*であることを単に意味するなら、入力文字列の接頭辞がこれらの接頭辞のいずれかと一致するかどうかをテストするメソッドが必要です。 Stringクラスは、このチェックに役立つメソッドを提供します。 –

+0

これをテストするための正規表現を書くことができます - GenericExpressionの各インスタンスが正規表現の "自分の部分"をどこかのテーブルに登録できるようにしますか? – Flexo

+0

@宿題のためであり、私はそれをそのようにマーキングしなかったことを謝罪します。また、詳細を提供するために質問を編集します。 – djs22

答えて

3

さて、私はあなたのプログラムでサポートされているものを表現どこかに定義する必要があると思います。私は最良の方法はmapを使用することだと思います。そこでは、インターフェイスを文字列にマッピングします。そうすれば、表現する文字列で式を簡単に検索できます。このマップを定義する場所は、デザインによって異なります。

getは、静的マップ内の所望の発現を調べ Expressions上の静的メソッドである
Expressions.get("&").invoke(true, false); 

:一つの可能​​性は、のような文字列に式を解決するヘルパークラスの静的メソッドです。静的イニシャライザでこのマップを初期化するか、式インスタンスを作成時に追加する必要があります。

EDIT: (私は答えにこれをコメントしたかったが、削除しているように見える) 個人的に私は自分自身を登録するクラスのアイデアを好きではありません。それは私に自分のコードを管理していないという気持ちを与える。私はExpressionsクラスのクラスをインスタンス化することを好むでしょう。クラスを登録するためのコードは、新しいサブクラスごとに記述する必要があります。このコードを1つのクラスに集約して、ロジックやリファクタリングを変更したい場合は、1つのクラスに触れるだけです。

+0

を明確にするのに役立ちます。ありがとうございます。私はあなたの編集を理解していないのですか? Expressionsクラスのクラスをどのようにインスタンス化しますか? – djs22

+0

静的なイニシャライザでマップを入力します。インタフェースのすべてのサブクラスをインスタンス化し、それらをマップに追加します。 – Jan

関連する問題