0

.net には、NameValueCollection (各キーが 1 つ以上の値を持つことができるキーと値のペアのコレクション) の "QueryString" という名前のプロパティを持つ WebClient という名前のクラスがあります。

しかし、私はJavaで作業していて、デフォルトではそこにない多くの機能を実装しているので、作成に使用されるキーと値のペアを保持するオブジェクトを作成するためにどのクラスを使用すべきか疑問に思っていました.クエリ文字列。java.util.Hashtable が使用したいクラスであると仮定するのは正しいですか? または、より適切な代替手段はありますか?

4

2 に答える 2

0

実際、リクエスト自体をカプセル化しようとしていると思いました。

わかりました、クエリについては、たくさんの例があります。Hibernate または Hibernate Search を見てください。確かに、HashMap だけでなく、実際のクラスを用意することをお勧めします。クラスはパラメーター内にマップを持つ場合がありますが、クラスは置換を行う toString() を持つことができます。たとえば、HQL クエリ文字列です。

from Users where name = :name

最終的な文字列になると、マップに入り、キーが名前 (:name) であるエントリを見つけ、それを引き出してクエリ文字列に挿入します。

于 2013-01-31T17:12:30.783 に答える
0

それはあなたが何をしようとしているかによって異なります。

個人的には、そのようなクラスを作成したことがないと思います。クエリ文字列をまとめたいとき、そこに入れたい特定のフィールドのセットがあり、StringBuilder または String "+" を使用してそれらをまとめます。つまり、私は Hashtable やその他の種類の構造を持っていません。それが何であれ、個々のフィールドがいくつかあるだけです。通常、フィールドをコレクションに入れてから取り出すことの価値はわかりません。

とはいえ、URL の構築をラップしたい汎用関数がある場合もあると思います。その場合、Hashtable (より可能性が高いのは Hashmap) が新しいコレクションを使用する可能性が高いことを確認してください。

または、最初に考えたのは、各パラメーターを保持する新しいクラスを作成して、名前と値の 2 つの異なるフィールドを持つことができるようにすることです。次に、関数をクラスに配置して、それらを等号でまとめて URL エンコードを行うことができます。次に、これらのオブジェクトの ArrayList を作成します。ArrayList は Hashtable よりも小さくて高速ですが、物事の規模からすれば節約はおそらく取るに足らないものです。

しかし、私が始めたポイントは次のとおりです。これらのパラメーターで何をしたいですか? コレクションにパラメーターを追加し、ある時点でそれらをすべて取り出してクエリ文字列を作成するだけの場合、ArrayList は問題なく、Hashtable も問題なく、ほとんどすべてのコレクションで問題ありません。

他にやりたいことはありますか?コレクションから要素をランダムに取得できるようにする必要がありますか? 2 つのコレクションを結合しますか? 同じクラスを使用して、データベース クエリなどの他の目的でパラメータを保持するので、リストを作成してどちらかの場所に渡すことができますか? などなど

呼び出し元が同じ名前の 2 つのパラメーターを追加しようとした場合、どうしますか。2 番目は最初のメッセージを黙って上書きする必要がありますか? それはエラーですか?または何?

等。

于 2013-01-31T17:36:43.430 に答える