gpt4 book ai didi

java - 为什么我们需要调用 "build()"让 Uri.Builder 对象传入 URL 构造函数?

转载 作者:行者123 更新时间:2023-12-02 09:41:35 24 4
gpt4 key购买 nike

我现在正在学习 URL,当我构建 Uri 并将其传递到 URL 构造函数时,我感到很困惑。

我发现大多数人使用 build() 作为 Uri.Builder 对象,然后将其(使用 toString())传递到 URL 构造函数中。然而,我发现我可以只传递我的 UriBuilder 对象并使用 toString() 到 URL 构造函数中,这也有效。那么,有什么区别呢?有什么优点和缺点?

public static URL buildUrl(String githubSearchQuery) {
Uri.Builder uriBuilder = Uri.parse(GITHUB_BASE_URL).buildUpon();

uriBuilder.appendQueryParameter(PARAM_QUERY, githubSearchQuery);
uriBuilder.appendQueryParameter(PARAM_SORT, sortBy);

//Uri uri = uriBuilder.build();

URL url = null;

try {
url = new URL(uriBuilder.toString());
} catch (MalformedURLException e) {
e.printStackTrace();
}

return url;
}

谢谢。

最佳答案

java.net.URL具有重载的构造函数:其中一个接受 URI,另一个接受 String。
所以两者都是有效的:

url = new URL(uriBuilder.toString()); // pass a String
url = new URL(uriBuilder.build()); // pass an android.net.Uri

这在两种情况下都有效,因为 UriBuilder.toString() is overrided to以文本经典格式呈现当前建筑 URI:

  public String toString() {
@SuppressWarnings("StringEquality")
boolean cached = cachedString != NOT_CACHED;
if (cached) {
return cachedString;
}
StringBuilder sb = new StringBuilder();
sb.append(scheme).append(':');
sb.append(getEncodedSchemeSpecificPart());
if (!fragment.isEmpty()) {
sb.append('#').append(fragment.getEncoded());
}
return cachedString = sb.toString();
}

但这是一种技巧,因为 toString() 即使不太可能在下一个版本中更改其实现,也不允许您将其作为有效的文本 URI 传递给 URL 构造函数。

关于java - 为什么我们需要调用 "build()"让 Uri.Builder 对象传入 URL 构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57029941/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com