리스트를 할 수없는 이유 mylist = ArrayList();
이 질문에 이미 답변이 있습니다.
우리가 할 수없는 이유
List<Parent> mylist = ArrayList<child>();
우리가 할 수 있다고 가정하십시오. 그러면이 프로그램은 괜찮을 것입니다.
ArrayList<Banana> bananas = new ArrayList<Banana>();
List<Fruit> fruit = bananas;
fruit.add(new Apple());
Banana banana = bananas.get(0);
그것은 분명히 유형 안전하지 않습니다-당신은 바나나 컬렉션에서 사과로 끝났습니다.
당신이 할 수 있는 일은 :
List<? extends Fruit> fruit = new ArrayList<Banana>();
컴파일러가 과일 목록에 추가 할 수 없기 때문에 이것은 안전 합니다. 일종의 과일 목록이라는 것을 알고 있으므로 다음과 같이 작성할 수 있습니다.
Fruit firstFruit = fruit.get(0);
하지만 목록에있는 과일의 종류를 정확히 알지 못하며 잘못된 일을하지 않도록합니다.
Java generics FAQ 다른 설명을 참조하십시오 .
같은 유형이 아니기 때문입니다. 당신의 또 다른 자식 클래스 있다고 가정 Parent( Child2인수를 위해), 그 다음의 인스턴스를 넣어 수있을 것 Child2으로 List<Parent>만 입력 - 잘못된 인스턴스에 넣어 List<Child>. 공변 상속은 진짜 골칫거리이며 배열 유형에 대해 Java에서만 지원됩니다 (이상한 문제를 일으킬 수 있음).
다음과 같이 할 수 있기 때문에 이렇게해야합니다. Parent A = new Child ();
편집 : 잠깐, 실제로 작동합니다.
List<Parent> list = new ArrayList<Parent>(); List<ChildA> tmp = new ArrayList<ChildA>(); list.addAll(tmp); List<ChildB> tmp2 = new ArrayList<ChildB>(); list.addAll(tmp2);
직접 캐스트가 지원되지 않는 것입니다.
참고 URL : https://stackoverflow.com/questions/5763750/why-we-cant-do-listparent-mylist-arraylistchild
'IT Share you' 카테고리의 다른 글
| LINES 및 COLUMNS 환경 변수가 스크립트에서 손실 됨 (0) | 2020.11.30 |
|---|---|
| C ++에서 정적 const 멤버를 초기화하는 방법은 무엇입니까? (0) | 2020.11.30 |
| '지정된 문자열이 제목에 필요한 형식이 아닙니다.'해결 (0) | 2020.11.30 |
| 솔루션 구성이지만 VS2010 도구 모음의 플랫폼이 아님 (0) | 2020.11.30 |
| off_t 유형의 완전한 정의는 어디에서 찾을 수 있습니까? (0) | 2020.11.30 |