Java에서 선택되지 않은 캐스트

Rupam Yadav 2023년10월12일
  1. Java에서 확인되지 않은 캐스트 경고란 무엇입니까?
  2. @SuppressWarnings를 사용하여 경고 무시
Java에서 선택되지 않은 캐스트

Java는 유형 안전성을 적용하는 프로그래밍 언어입니다. 즉, 저장하거나 사용할 데이터 유형을 항상 지정해야 하며 호환되지 않는 유형을 저장할 수 없습니다.

예를 들어 문자열에 정수 값을 저장할 수 없으며 컴파일러는 오류 또는 경고를 발생시킵니다. 데이터 유형과 관련된 경고 중 하나는 선택되지 않은 캐스트입니다.

Java에서 확인되지 않은 캐스트 경고란 무엇입니까?

확인되지 않은 캐스트 경고는 유형을 확인하지 않고 매개변수화된 유형에 원시 유형을 시도할 때 발생합니다. Java는 매개변수화된 유형이 지정된 유형으로만 제한되기 때문에 이 방법을 권장하지 않습니다.

Java의 매개변수화된 유형 중 하나는 HashMap으로, key 유형과 value 유형의 두 매개변수를 사용합니다. 아래 예제 코드에서 rawMap이라는 HashMap의 개체를 만들고 키가 포함된 일부 값을 넣습니다.

이 프로그램을 컴파일하면 아래와 같은 몇 가지 경고가 표시됩니다. 처음 두 경고는 MapHashMap 매개변수화된 클래스를 원시로 사용하기 때문에 발생합니다.

마지막 세 개의 경고는 유형을 지정하거나 유형을 확인하지 않고 값을 입력하기 때문에 프로그램의 모든 개별 put 문에 대한 것입니다. 따라서 확인되지 않은 캐스트 경고가 나타납니다.

import java.util.HashMap;
import java.util.Map;

public class Main {
  public static void main(String[] args) {
    Map rawMap = new HashMap();
    rawMap.put("key1", "String1");
    rawMap.put("key2", "String2");
    rawMap.put("key3", "String3");

    System.out.println(rawMap);
  }
}

출력:

{key1=String1, key2=String2, key3=String3}

경고:

Raw use of parameterized class 'Map'
Raw use of parameterized class 'HashMap'
Unchecked call to 'put(K, V)' as a member of raw type 'java.util.Map'
Unchecked call to 'put(K, V)' as a member of raw type 'java.util.Map'
Unchecked call to 'put(K, V)' as a member of raw type 'java.util.Map'

이제 실제 문제를 알았으므로 이 문제에 대한 솔루션이나 해결 방법을 논의할 수 있습니다.

@SuppressWarnings를 사용하여 경고 무시

경고를 무시하려면 @SupressWarnings 주석을 사용할 수 있습니다. 이것은 좋은 해결책이지만 앞으로 이 경고와 관련하여 문제가 없을 것이라는 것을 알고 있는 경우에만 가능합니다.

이 주석을 사용하기 위해 확인되지 않음인 표시하지 않으려는 경고를 전달했습니다. 경고가 생성되는 함수에서 이 주석을 사용합니다.

아래는 이전 예제에서 본 것과 동일한 프로그램이지만 main() 함수에 @SuppressWarnings 주석을 사용하고 unchecked를 전달합니다. HashMap은 여전히 ​​원시 유형으로 사용되지만 컴파일할 때 경고가 사라집니다.

import java.util.HashMap;
import java.util.Map;

public class Main {
  @SuppressWarnings("unchecked")
  public static void main(String[] args) {
    Map rawMap = new HashMap();
    rawMap.put("key1", "String1");
    rawMap.put("key2", "String2");
    rawMap.put("key3", "String3");

    System.out.println(rawMap);
  }
}

출력:

{key1=String1, key2=String2, key3=String3}

경고:

Raw use of parameterized class 'Map'
Raw use of parameterized class 'HashMap'

이 문제에 대한 또 다른 분명한 해결책은 매개변수화된 유형 HashMap을 원래대로 사용하는 것입니다. 다음 예에서는 HashMap에 키 유형과 값을 지정하면 경고가 사라집니다.

import java.util.HashMap;
import java.util.Map;

public class Main {
  public static void main(String[] args) {
    Map<String, String> rawMap = new HashMap<>();
    rawMap.put("key1", "String1");
    rawMap.put("key2", "String2");
    rawMap.put("key3", "String3");

    System.out.println(rawMap);
  }
}

출력:

{key1=String1, key2=String2, key3=String3}
작가: Rupam Yadav
Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn