WEB开发网
开发学院软件开发Java 面向 Java 开发人员的 Scala 指南: 用 Scitter 更... 阅读

面向 Java 开发人员的 Scala 指南: 用 Scitter 更新 Twitter

 2009-12-09 00:00:00 来源:WEB开发网   
核心提示: execute() 方法最大的变化是引入了 Map[String,String] 参数,以及与它的大小有关的 “if” 测试,面向 Java 开发人员的 Scala 指南: 用 Scitter 更新 Twitter(4),该测试决定是处理 GET 请求还是 POST 请求

execute() 方法最大的变化是引入了 Map[String,String] 参数,以及与它的大小有关的 “if” 测试。该测试决定是处理 GET 请求还是 POST 请求。由于 Apache Commons HttpClient 要求 POST 请求的主体放在 NameValuePairs 中,因此我们使用 foreach() 调用遍历 map 的元素。我们以二元组 pr 的形式传入 map 的键和值,并将它们分别提取到本地绑定变量 k 和 v,然后使用这些值作为 NameValuePair 构造函数的构造函数参数。

我们还可以使用 PostMethod 上的 setParameter(name, value) API 更轻松地做这些事情。出于教学的目的,我选择了清单 3 中的方法:以表明 Scala 数组和 Java 数组一样,仍然是可变的,即使数组引用被标记为 val 仍是如此。记住,在实际代码中,对于每个 (k,v) 元组,使用 PostMethod 上的 setParameter(name, value) 方法要好得多。

还需注意,对于 if/else 返回的 “method” 对象的类型,Scala 编译器会进行 does the right thing 类型推断。由于 Scala 可以看到 if/else 返回的是 GetMethod 还是 PostMethod 对象,它会选择最接近的基本类型 HttpMethodBase 作为 “method” 的返回类型。这也意味着,在 execute() 方法的其余部分中,HttpMethodBase 中的任何不可用方法都是不可访问的。幸运的是,我们不需要它们,所以至少现在没有问题。

清单 3 中的实现的背后还潜藏着最后一个问题,这个问题是由这样一个事实引起的:我选择了使用 Map 来区分 execute() 方法是处理 GET 操作,还是处理 POST 操作。如果还需要使用其他 HTTP 动作(例如 PUT 或 DELETE),那么将不得不再次重构 execute()。到目前为止,还没有这样的问题,但是今后要记住这一点。

上一页  1 2 3 4 5 6 7 8 9  下一页

Tags:面向 Java 开发

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接