Nel mio programma ho bisogno di tenere traccia dell'elenco delle connessioni aperte ad alcuni server HTTP - per scollegarli in una volta sola se necessario.Rimozione dell'oggetto URLConnection da ArrayList <URLConnection>
Ho affrontato il seguente problema. Se mi collego al server HTTP, tutto funziona perfettamente, ma se su HTTPS, le connessioni non vengono rimosse dall'elenco. Porta alla perdita di memoria.
Esempio:
package test;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
try {
ArrayList<URLConnection> al = new ArrayList<URLConnection>();
URL url = new URL("http://www.example.com");
URLConnection conn = url.openConnection();
al.add(conn);
System.out.println("Result of removing = " + al.remove(conn));
} catch (Exception ex) {
ex.printStackTrace(System.err);
}
}
}
Se URL punta a "http://www.example.com", quindi "Risultato di rimozione = true".
Ma se l'URL punta a "https://www.example.com", quindi "Risultato di rimozione = falso".
Non capisco un simile comportamento. Ho alcune ipotesi, ma non sono sicuro ...
Qualcuno può aiutare?
Quindi, è davvero il caso di strano comportamento di _equals _... Ho mandato via questa spiegazione perché è davvero pazza ... Grazie! A proposito, non conosci altri esempi di classi con questo comportamento _equals_? –
No, anzi non lo conoscevo neanche io. L'unico caso di un'implementazione difettosa di * uguale a * che posso ricordare ora è quello di java.net.URL (in questo caso il difetto riguarda la coerenza: la relazione di uguaglianza dipende dalla risoluzione DNS, quindi due istanze URL potrebbero o meno essere uguale a seconda dell'indirizzo IP risolto, ma questa è una storia diversa). – Javier
Ora è tutto chiaro. Grazie! –