를 사용하고 계십니까?컬렉션 객체 생성 제네릭
답변
이
List<Animal> list = new ArrayList<Dog>();
파라미터 화 된 형태는 유사한 오류가 양단부에서 동일한 유형이어야한다. 상속 (IS-A) 개념은 없습니다. 그래도 사용하고 싶다면 와일드 카드 (?)를 extend/super 키워드와 함께 사용하십시오.이 키워드는 등호 왼쪽에서만 허용됩니다. 누군가가 Cat
를 추가하려고하면 나중에 실패하고 던져 예외 것
List<Animal> list = new ArrayList<Dog>(); // is not allowed
하지만
Animal[] animal = new Dog[10]; //is allowed
animal[0] = new Dog(); // is allowed
객체 (동물을 확장).
animal[1] = new Cat(); //compiles fine but throws java.lang.ArrayStoreException at Runtime.
animal[1]
또는 animal[index]
이 개 reference
들고있다 기억하십시오. 따라서 Dog
참조 변수는 Dog
개체가 아닌 Cat
개체를 참조 할 수 있습니다.
그런 시나리오를 피하기 위해 JSL은 generics list/Collection에서 이러한 변경을 수행했습니다. 이 대답은 귀하의 질문 (Map
)에도 적용됩니다.
매개 변수화 된 형식은 양쪽 끝에 같은 형식이어야합니다.
List<Animal> list = new ArrayList<Animal>();
제네릭은 동일 변종이 아닙니다. 당신은 사용할 수 있습니다 : 과제의 외부 왼쪽에있는 Map
는 "가"수 있지만
Map<Integer, Map<String, Integer>> myMap = new HashMap<Integer, Map<String, Integer>>();
^ ^
--------------^------------------- becomes ------^ |
-----------------must remain as type ---------------
할당으로 HashMap
은 동일한 제네릭 매개 변수로 나타나는 유형에 적용 할 수 없습니다.
편집 :이 구문은 항목이지도에 추가 할 수 있지만으로 유용하지 않습니다
가Map<Integer, ? extends Map<String, Integer>> myMap = new HashMap<Integer, HashMap<String, Integer>>();
주 : @Keppil에서 언급 한 바와 같이
, 당신은 경계 와일드 카드 구문을 사용할 수 있습니다 메소드와주고받는 타입.
일부 참조 :
이 시도 :
Map<Integer, HashMap<String, Integer>> myMap = new HashMap<Integer, HashMap<String, Integer>>();
당신이 t 같은 뭔가가 필요 그의 :
Map<Integer, Map<String, Integer>> myMap = new HashMap<Integer, Map<String, Integer>>();
myMap.put(1, new HashMap<String, Integer>());
는 시도이
Map<Integer, ? extends Map<String, Integer>> myMap = new HashMap<Integer, HashMap<String, Integer>>();
다음 정수
의 HashSet의에 두 번을 추가 할 수 있기 때문에,Set<Number> set = new HashSet<Integer>();
이 허용되지 않는 간단한 예제를 설명하는 easer입니다
set.add(1.0)
주
Set<? extends Number> set = new HashSet<Integer>();
에 세트에 null
아무것도하지만를 추가 할 수 없습니다. 그러나 당신은 단지 여기 http://docs.oracle.com/javase/tutorial/extra/generics/wildcards.html
Map<String, Integer>
가 HashMap<String, Integer>
과 동일하지 않습니다 당신은 더 많은 정보를 찾을 수 있습니다 그것은
에서 숫자를 읽을 수 있습니다. 그것이 문제이다.
사실 HashMap은 맵 인터페이스를 구현합니다. 따라서 왼쪽에 ? extends Map<String, Integer>
이어야합니다.
- 1. Java 제네릭 : 클래스 객체 컬렉션 만들기 Throwable
- 2. 제네릭 클래스에 제네릭 컬렉션 형식을 지정하려면 어떻게합니까?
- 3. Java 제네릭 및 컬렉션
- 4. PowerShell 제네릭 컬렉션
- 5. 제네릭 컬렉션을 래핑하는 제네릭 컬렉션 라이브러리가 있습니까?
- 6. 제네릭 컬렉션 객체 위에있는 일반 페이징 객체를 어떻게 설정합니까?
- 7. svcutil 생성 코드에 중첩 된 제네릭 컬렉션 클래스가있는 이유가 있습니까?
- 8. 해킹 언어 : 컬렉션 유형의 제네릭
- 9. 백본 컬렉션 트리 생성
- 10. xml에 객체 컬렉션 (차례로 컬렉션 객체 포함) 내보내기
- 11. Ruby 인터페이스, 객체 컬렉션
- 12. 은 컬렉션 객체
- 13. Java 컬렉션 객체 선언
- 14. 오라클 객체 및 컬렉션
- 15. SWT 위젯 객체 컬렉션 유지
- 16. 생성 된 제네릭 형식은
- 17. 제네릭 방법 생성 방법
- 18. 지정 제네릭 컬렉션 형식 PARAM (자바 반사)
- 19. 제네릭 및 컬렉션 - 형식이 정의되지 않은 메서드
- 20. Type 인수를 사용하여 제네릭 컬렉션 인스턴스화
- 21. 제네릭 컬렉션 위에서 아래로 반복 (TDictionary)
- 22. 유형이 안전한 제네릭 컬렉션 빌더/컨테이너
- 23. 결합 깊은 제네릭 컬렉션 다음 Java 코드로
- 24. 컬렉션 대신 배열로 생성 된 중첩 컬렉션
- 25. 컬렉션 컬렉션으로 XML 생성
- 26. Json의 MVC 객체, 객체 목록, 컬렉션 serialize
- 27. Java에서 리플렉션을 통해 컬렉션 getter의 제네릭 형식을 찾을 수 있습니까?
- 28. JAXB에서 제네릭 클래스를 생성 할 수 있습니까?
- 29. 엔티티의 참조 값 객체 컬렉션
- 30. Node.js의 Mongodb 컬렉션 객체 캐싱
'Map> myMap = new HashMap >(); ' –
Keppil
@Reimeus 더 많은 설명이 도움이 될 것입니다. –