3

在我看来,这两种方法 (URIBuilder.removeQueryURIBuilder.clearParameters) 做的事情完全相同,所以我不确定为什么有两种选择。在什么情况下我应该使用其中一种?

我注意到相应的URIBuilder.setQuery方法被标记为不推荐使用URIBuilder.setParameters,但URIBuilder.removeQuery不是。我是否错误地认为它应该是?

更新:奥列格在开发邮件列表中 提供了以下解释:

#setQuery 方法被弃用的原因是它与该类的所有其他方法的合同不一致。#setQuery 期望输入是 URL 编码的,而所有其他方法期望非转义输入。选择是在更改方法的契约和打破几乎所有依赖于 URIBuilder 的单个应用程序或方法弃用以支持另一种名称稍不直观的方法之间做出选择。所以,应该使用 [set|clear| add]Parameter[s] 方法来处理查询参数和 #setCustomQueury 方法来设置自定义查询。

4

1 回答 1

2

好吧,如果您查看源代码,则确切的差异非常小:

public URIBuilder removeQuery() {
    this.queryParams = null;
    this.query = null; // <- this is the only difference
    this.encodedQuery = null;
    this.encodedSchemeSpecificPart = null;
    return this;
}

对比

public URIBuilder clearParameters() {
    this.queryParams = null;
    this.encodedQuery = null;
    this.encodedSchemeSpecificPart = null;
    return this;
}

因此,clearParameters将保留您的查询对象。

于 2013-10-29T21:10:01.763 回答