List<br>List<br>의 하위 클래스입니까?
1391 단어 하위 클래스
public class ArrayErr
{
public static void main(String[] args)
{
// Integer
Integer[] ia = new Integer[5];
// Integer[] Number[]
Number[] na = ia;
// , ArrayStoreException
// 0.5 Integer
na[0] = 0.5; // ①
}
} 위 코드는 컴파일할 수 있지만 실행하면 다음 오류가 발생합니다.
Exception in thread "main"java.lang.ArrayStoreException: java.lang.Double at ArrayErr.main(ArrayErr.java:13)
이것은 잠재적인 위험의 일종이다.Java의 초기 디자인에서 Interger[]수 그룹에 Number[]수 그룹에 값을 부여할 수 있도록 허용했는데 이 디자인 이념에는 결함이 존재한다.디자인이 우수한 언어는 강력한 기능을 제공해야 할 뿐만 아니라, 강력한 '오류 알림' 과 '오류 경고' 를 제공해야만 개발자의 실수를 최대한 피할 수 있다.Java에서 Integer[]의 배열을 Number[]에게 값을 부여하는 것은 안전한 디자인이 아니다.
Java 범용의 설계 원칙은 코드를 컴파일할 때 경고가 나타나지 않으면 실행할 때 ClassCastException 이상이 발생하지 않는다는 것이다.이 설계 원칙에 따라 범형은List
List<Integer> iList = new ArrayList<>();
//
List<Number> nList = iList; 또한 우리는 더욱 넓은 의미를 가진 결론을 얻을 수 있다. 만약에 Foo가 Bar의 하위 유형(하위 클래스 또는 하위 인터페이스)이라고 가정하면Foo[]는 여전히Bar[]의 하위 유형이지만 G