
org.sonar.l10n.java.rules.java.S2112.html Maven / Gradle / Ivy
Why is this an issue?
The equals
and hashCode
methods of java.net.URL
may trigger a name service lookup (typically DNS) to resolve
the hostname or IP address. Depending on the configuration, and network status, this lookup can be time-consuming.
On the other hand, the URI
class does not perform such lookups and is a better choice unless you specifically require the
functionality provided by URL
.
In general, it is better to use the URI
class until access to the resource is actually needed, at which point you can convert the
URI
to a URL
using URI.toURL()
.
This rule checks for uses of URL
's in Map
and Set
, and for explicit calls to the equals
and
hashCode
methods. It suggests reconsidering the use of URL
in such scenarios to avoid potential performance issues related
to name service lookups.
How to fix it
Use the URI
class until access to the resource is actually needed.
Code examples
Noncompliant code example
public void checkUrl(URL url) {
Set<URL> sites = new HashSet<URL>(); // Noncompliant
URL homepage = new URL("http://sonarsource.com"); // Compliant
if (homepage.equals(url)) { // Noncompliant
// ...
}
}
Compliant solution
public void checkUrl(URL url) {
Set<URI> sites = new HashSet<URI>(); // Compliant
URI homepage = new URI("http://sonarsource.com"); // Compliant
URI uri = url.toURI();
if (homepage.equals(uri)) { // Compliant
// ...
}
}
Resources