"URL.hashCode"과 "URL.equals" 사용을 피하세요.

 

java.net.URLequals이나 hashCode 메서드는 hostname이나 IP 주소를 확인하기 위해, NameService(일반적으로 DNS)에 lookup 호출을 할 수도 있습니다. 따라서 네트워크 상태에 따라 시간이 오래 걸릴 수 있습니다. 반면 URI는 이러한 호출을 수행하지 않으므로, URL의 특정한 기능이 필요하지 않은 경우, 이를 대신 사용해야 합니다.

일반적으로 리소스에 실제로 접근할 필요가 하기 전까지는 URI 클래스를 사용하는 것이 좋습니다. URIURI.toURL()을 사용하여 URL로 변환할 수 있습니다.

이 규칙은 Map이나 Set에서 URL의 사용을 확인하고 있거나, equals, hashCode 메서드를 직접 호출하는 경우 알림을 울립니다. (^역: Map 이나 Set 내부에서 equals 메소드를 호출하기 때문인 것으로 보입니다)

규칙을 어긴 코드

public void checkUrl(URL url) {
  Set<URL> sites = new HashSet<URL>();  // 규칙을 어긴 코드

  URL homepage = new URL("http://sonarsource.com");  // 규칙을 어긴 코드
  if (homepage.equals(url)) { // 규칙을 어긴 코드
    // ...
  }
}

규칙을 준수한 해결책

public void checkUrl(URL url) {
  Set<URI> sites = new HashSet<URI>();  // 규칙을 준수한 해결책

  URI homepage = new URI("http://sonarsource.com");  // 규칙을 준수한 해결책
  URI uri = url.toURI();
  if (homepage.equals(uri)) {  // 규칙을 준수한 해결책
    // ...
  }
}

If you like SONARKUBE, don’t forget to give me a star. :star2:

원문으로 바로가기

Star This Project