通常自定義實現url的協議解析.方案爲實現URLStreamHandler.實現其 openConnection 就能夠了, 若是咱們執行 new URL("xx://aa/ff").hashCode();ide
public synchronized int hashCode() { if (hashCode != -1) return hashCode; // 實現爲轉發給自實現的URLStreamHandler 進行處理 hashCode = handler.hashCode(this); return hashCode; }
默認URLStreamHandler 處理hashCode爲this
protected int hashCode(URL u) { int h = 0; // Generate the protocol part. String protocol = u.getProtocol(); if (protocol != null) h += protocol.hashCode(); // Generate the host part. InetAddress addr = getHostAddress(u); if (addr != null) { h += addr.hashCode(); } else { String host = u.getHost(); if (host != null) h += host.toLowerCase().hashCode(); } // Generate the file part. String file = u.getFile(); if (file != null) h += file.hashCode(); // Generate the port part. if (u.getPort() == -1) h += getDefaultPort(); else h += u.getPort(); // Generate the ref part. String ref = u.getRef(); if (ref != null) h += ref.hashCode(); return h; }
其會進行一次url的訪問拿到內容參數 hashCode. 但通常咱們定義一個url是內容不會變化的. 咱們自定義協議可使用 如下代碼url
@Override protected int hashCode(URL u) { if(null == u) { return 0; } return u.toString().hashCode(); }