List<br>List<br>의 하위 클래스입니까?

1391 단어 하위 클래스
이 문제에 대답하기 전에, 우리는 먼저 다른 문제를 탐구해 봅시다. Interger[]수조는 Number[]수조에 값을 부여할 수 있습니까?먼저 다음 코드를 보십시오.
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의 하위류라고 생각하지 않는다.다음 두 줄의 코드가 이 점을 증명했다.
 
		List<Integer> iList = new ArrayList<>();
		//           
		List<Number> nList = iList;

또한 우리는 더욱 넓은 의미를 가진 결론을 얻을 수 있다. 만약에 Foo가 Bar의 하위 유형(하위 클래스 또는 하위 인터페이스)이라고 가정하면Foo[]는 여전히Bar[]의 하위 유형이지만 G는 G의 하위 유형이 아니다.  

좋은 웹페이지 즐겨찾기