2017-01-29 4 views
0

I Funktionalität HttpsURLConnection hinzufügen möchten, damit ich so diese Klasse wie zu erweitern versucht:Erweiterung HttpsURLConnection

public abstract class HTTPClient extends HttpsURLConnection 

Wenn ich diese Klasse zu verwenden bin versucht:

HTTPClient con = (HTTPClient) url.openConnection(); 

ich folgendes erhalten Fehler:

Exception in thread "main" java.lang.ClassCastException: sun.net.www.protocol.https.HttpsURLConnectionImpl cannot be cast to HTTPClient 

Was ist das Problem hier und wie kann es behoben werden?

Danke.

+0

Könnten Sie das Teil einfügen, wo Sie die '' url'' Variable definieren? – Matt

+2

Warum glauben Sie, dass 'url.openConnection()' etwas über Ihre Unterklasse von 'HttpsURLConnection' weiß? Es gibt eine Implementierung von 'URLConnection' zurück, die sich in einem anderen Zweig der Vererbungshierarchie befindet und in keiner Beziehung zu Ihrer Unterklasse steht. Damit dies funktionieren kann, müsste "URL" mit einer Factory angepasst werden, um Verbindungen zu erstellen, und das ist nicht Teil der API. –

+0

HttpURLConnection gehört zur gleichen Hierarchie wie URLConnection - zu implizieren, dass der Benutzer hätte wissen müssen, dass das System eine Implementierung zu ihm werfen würde, ist absurd – gpasch

Antwort

0

Sie erweitern können wie folgt:

class H extends HttpURLConnection { 
    URLConnection uc; 
    public H(URL url) { 
    super(url); 
    try { uc=url.openConnection(); } catch(Exception ex) { ex.printStackTrace(); } 
} 

public boolean usingProxy() { return true; } 

public void disconnect() { } 

public void connect() { } 

} 
Verwandte Themen