2014-10-28 137 views
2

给定一个java.net.URI对象,我需要:如何修改/更新java.net.URI对象?

  • 破坏性地修改该对象(例如,path部件)上的一个字段。但是没有setX方法,所以看起来这些对象应该是不可变的。
  • 构造一个新的URI对象,除了给定字段(“功能更新”)外,它与原始对象相同。然而,没有withX方法,所以我将不得不编写自己的逻辑来处理这个问题。

我真的要写我自己的函数来处理URI对象的修改吗?

回答

2

是的,您每次都会创建一个新对象,因为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 
+0

感谢。你知道'URIBuilder'上的'setX'方法实际上做了什么吗?文档没有说。 – jameshfisher 2014-10-28 17:41:40

+0

我想它会在你创建的'URIBuilder'实例中设置一个字段。在设置了所有的URI组件后,你可以使用'URIBuilder#build()'得到一个新的'URI'实例。 – manouti 2014-10-28 17:47:24