IT Share you

리스트를 할 수없는 이유

shareyou 2020. 11. 30. 20:17
반응형

리스트를 할 수없는 이유 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

반응형