如何在Java中克隆URI

ale*_*sch 6 java

是否有更好的方法来获取URI的副本(克隆)而不是这个可怕的黑客攻击?

import org.eclipse.emf.common.util.URI;

URI cloned = URI.createURI( originalURI.toString() );
Run Code Online (Sandbox Code Playgroud)

mdm*_*dma 12

URI是不可变的值类 - 因此您不应该真正需要复制.但如果你真的需要,那么你的"黑客"(它真的不是那么糟糕)就是这样做的方法.

编辑:我刚刚注意到你没有使用java.net.URI ...

来自Eclipse SDK javadocs,

像String一样,URI是一个不可变的类;

该类也是不可变的,同样的建议也适用.您通常不需要复制,只需重用您拥有的URI实例即可.它是安全的原因是一旦创建了对象,它就无法更改.两个不同的客户端可以使用相同的URI,而不必担心它会被另一个客户端修改.

URI上有一些方法可以更新URI的组件(例如appendQuery()),但更新是在的URI 实例上完成的 - 现有的URI是未修改的.