나는과 같이 목록을 만들 수 있도록하려면 -이유는이 라인은 목록을 <Object>리터를 컴파일러하지 않습니다 = 새로운 ArrayList를 <String>()?
가List<Object> l = new ArrayList<String>();
ArrayList
의 표준 라이브러리 구현이 허용하지 않습니다. 컴파일 시간 오류가 발생합니다. 그래서 ArrayList
내 자신의 구현을 쓰고 있어요. 컴파일되지 않는
public class ArrayList<Y extends X> implements List<X> {...}
public class ArrayList<X super Y> implements List<X> {...}
-
은 지금까지 나는이 시도했다. 그래서
, 어떻게 내가 위에서 언급 한 것처럼 사용할 수있을 것 ArrayList에 쓸 수?
List<Object> l = new ArrayList<String>();
사용자는이 소식 Is List<Dog> a subclass of List<Animal>? Why aren't Java's generics implicitly polymorphic?
을 지적하지만 난 여전히 이해가 안 돼요.
List<Object> l = new ArrayList<String>();
l.add(new Dog());
이 의미가 있지만, 내가 이 런타임에서 예외를 throw에 불과 컴파일 자바 배열을 가진 것은 비슷한 종류의 작업을 수행 할 수 있습니다 - 주어진 이유는 우리가 지금과 같은 상황을 피하려는 것이 었습니다.
Object o[] = new String[10];
o[0] = new Dog();
그렇다면 후자의 코드를 컴파일 할 수있게 해주는 이유는 무엇입니까?
편집은 - 위에 표시된대로 비슷한 질문은 이미 요청했습니다. 이 질문은 Why is the ArrayStoreException a RuntimeException?
왜 링크 된 질문 귀하의 질문에 대답하지 않습니다에 대한 참조? Java가 이러한 종류의 구문을 지원하지 않는 이유를 설명합니다. 그렇지 않다면 정확히 무엇을 달성하고 싶습니까? 'new ArrayList()'을 쓰면리스트는 ** 오직'String'과 그 서브 타입을 받아 들일 것입니다. 대신'new ArrayList
런타임에 컴파일 오류보다 예외가 발생한다고 말하는가? 그건별로 의미가없는 것처럼 보입니다. – Marvin
아니요, 그 말은 아닙니다. 나는 그저 이것에 대한 이유가 무엇인지 묻는다. –