2014-10-28 135 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