Linux, Open-source, Programação e Produtividade

URL.equals

Jonas Abreu em 15/04/2012

Em uma aplicação que estava desenvolvendo, quando rodei o Find Bugs, ele apontou um erro em um mapa com a seguinte declaração:

Map<URL, MeuObjeto> mapa = new HashMap<URL, MeuObjeto>();

O problema que ele apontava era sobre usar java.net.URL como chave de um mapa. O pedaço interessante do javadoc é o seguinte:

 * Two URL objects are equal if they have the same protocol, reference
 * equivalent hosts, have the same port number on the host, and the same
 * file and fragment of the file.<p>
 *
 * Two hosts are considered equivalent if both host names can be resolved
 * into the same IP addresses; else if either host name can't be
 * resolved, the host names must be equal without regard to case; or both
 * host names equal to null.<p>
 *
 * Since hosts comparison requires name resolution, this operation is a
 * blocking operation. <p>

Segundo o javadoc, a chamada para o equals pode precisar fazer lookup de DNS, o que pode consumir uns bons millisegundos. Além de ser uma possível fonte de bugs.

A solução foi simplesmente usar String no lugar de URL.

Creative Commons License
URL.equals de Jonas Abreu está licenciado sob Creative Commons License.