【发布时间】:2014-10-28 17:29:16
【问题描述】:
给定一个java.net.URI 对象,我需要:
- 破坏性地修改该对象上的一个字段(例如
path组件)。但是没有setX方法,所以这些对象似乎应该是不可变的。 - 构造一个新的
URI对象,除了给定字段(“功能更新”)外,它与原始对象相同。但是没有withX方法,所以我必须编写自己的逻辑来处理这个问题。
我真的必须编写自己的函数来处理URI对象的修改吗?
【问题讨论】:
给定一个java.net.URI 对象,我需要:
path 组件)。但是没有 setX 方法,所以这些对象似乎应该是不可变的。URI 对象,除了给定字段(“功能更新”)外,它与原始对象相同。但是没有withX 方法,所以我必须编写自己的逻辑来处理这个问题。我真的必须编写自己的函数来处理URI对象的修改吗?
【问题讨论】:
是的,您每次都需要创建一个新对象,因为 java.net.URI 是不可变的。您可以使用第三方类,例如 Apache HttpComponents 的URIBuilder。
来自official tutorial的示例:
URI uri = new URIBuilder()
.setScheme("http")
.setHost("www.google.com")
.setPath("/search")
.setParameter("q", "httpclient")
.setParameter("btnG", "Google Search")
.setParameter("aq", "f")
.setParameter("oq", "")
.build(); // the build method creates a new URI instance behind the scenes
【讨论】:
URIBuilder 上的setX 方法实际上是做什么的吗?文档没有说。
URIBuilder 实例中设置一个字段。设置好所有URI组件后,就可以使用URIBuilder#build()获取一个新的URI实例了。