在 .net 中有一个名为 WebClient 的类,它有一个名为“QueryString”的属性,其类型为 NameValueCollection(键/值对的集合,其中每个键可以有一个或多个值)。
但由于我正在使用 java,并实现了很多默认情况下不存在的功能,我想知道我应该使用哪个类来创建将用于保存将用于创建的键/值对的对象查询字符串。我是否正确假设 java.util.Hashtable 是我要使用的类?还是有更合适的选择?
在 .net 中有一个名为 WebClient 的类,它有一个名为“QueryString”的属性,其类型为 NameValueCollection(键/值对的集合,其中每个键可以有一个或多个值)。
但由于我正在使用 java,并实现了很多默认情况下不存在的功能,我想知道我应该使用哪个类来创建将用于保存将用于创建的键/值对的对象查询字符串。我是否正确假设 java.util.Hashtable 是我要使用的类?还是有更合适的选择?
实际上,我以为您正在尝试封装请求本身。
好的,对于查询,有很多示例。查看休眠或休眠搜索。当然,拥有一个真正的类而不只是 HashMap 是个好主意。该类可能在参数内部有一个映射,但该类可能有一个 toString() 来进行替换,例如 HQL 查询字符串:
from Users where name = :name
当变成最终字符串时,将进入地图并找到键为名称的条目(:名称),将其拉出并将其插入查询字符串。
这取决于你想要做什么。
就个人而言,我认为我从未创建过这样的课程。当我想组合一个查询字符串时,我有一组要放入其中的特定字段,我只需使用 StringBuilder 或字符串“+”将它们组合在一起。也就是说,我没有 Hashtable 或任何其他类型的结构:我只有几个单独的字段,无论它们是什么。通常,我看不到将字段放入集合然后将它们取出的价值。
也就是说,我敢肯定在某些情况下,您想要围绕构建 URL 进行一些通用函数。在这种情况下,确定一个 Hashtable——或者更可能是一个 Hashmap,也可以使用较新的集合——可以正常工作。
或者,我的第一个想法是创建一个新类来保存每个参数,这样它就可以有两个不同的字段用于名称和值。然后你可以把函数放在类中,用等号把它们放在一起,然后做 URL 编码。然后制作这些对象的 ArrayList。ArrayList 将比 Hashtable 更小更快,尽管从规模上看,任何节省都可能微不足道。
但我开始的重点是:你想用这些参数做什么?如果只是:将参数添加到集合中,然后在某个时候将它们全部拉出以构建查询字符串,这就是所有发生的事情,ArrayList 就可以了,Hashtable 就可以了,几乎任何集合都可以。
你还有什么想做的吗?您是否需要能够从集合中随机检索元素?合并两个集合?使用同一个类来保存用于其他目的的参数,例如数据库查询,这样您就可以构建列表,然后将其传递到任何一个地方?等等等等。
如果调用者尝试添加两个同名的参数,你想做什么。第二个应该默默地覆盖第一个吗?这是一个错误吗?或者是什么?
等等。