Java에서 선택되지 않은 캐스트
Java는 유형 안전성을 적용하는 프로그래밍 언어입니다. 즉, 저장하거나 사용할 데이터 유형을 항상 지정해야 하며 호환되지 않는 유형을 저장할 수 없습니다.
예를 들어 문자열에 정수 값을 저장할 수 없으며 컴파일러는 오류 또는 경고를 발생시킵니다. 데이터 유형과 관련된 경고 중 하나는 선택되지 않은 캐스트입니다.
Java에서 확인되지 않은 캐스트 경고란 무엇입니까?
확인되지 않은 캐스트 경고는 유형을 확인하지 않고 매개변수화된 유형에 원시 유형을 시도할 때 발생합니다. Java는 매개변수화된 유형이 지정된 유형으로만 제한되기 때문에 이 방법을 권장하지 않습니다.
Java의 매개변수화된 유형 중 하나는 HashMap
으로, key
유형과 value
유형의 두 매개변수를 사용합니다. 아래 예제 코드에서 rawMap
이라는 HashMap
의 개체를 만들고 키가 포함된 일부 값을 넣습니다.
이 프로그램을 컴파일하면 아래와 같은 몇 가지 경고가 표시됩니다. 처음 두 경고는 Map
및 HashMap
매개변수화된 클래스를 원시로 사용하기 때문에 발생합니다.
마지막 세 개의 경고는 유형을 지정하거나 유형을 확인하지 않고 값을 입력하기 때문에 프로그램의 모든 개별 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 Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn