2015-01-08 2 views
-1

내 자바 책에 대한 설명을 찾았지만 찾지 못했습니다. 나는 인터넷에서 기사를 찾고 있는데, 나는 아무것도 발견하지 못했다.Collection <? extends myObject>는 의미합니까?

Collection <? extends myObject> 내가 컬렉션에 넣을 수 있다는 것을 의미합니까 인 myObject인 myObject을 확장 객체 모두? 그것은 다른 것을 의미합니까?

class Doctor{} 

class GeneralDoctor extends Doctor{} 

class Dentist extends Doctor{} 

그런 다음, Collection<? extends Doctor> doctors;이의 아이를 받아 들일 것입니다 :

+1

http://stackoverflow.com/questions/252055/java-generics-wildcards – assylias

+1

컬렉션에 다른 종류의 물건을 넣으려고 할 때 어떤 일이 발생 했습니까? 내 말은, 너 이걸 시도해 봤어? –

+0

http://stackoverflow.com/questions/4343202/difference-between-super-t-and-extends-t-in-java –

답변

2

는 어떤 객체가 a-kind-of 관계 즉, myObject가 class 또는 interface 예를 들어

이 될 수 인 myObject의 하위 클래스입니다 ?을 대체 할 수 있음을 의미 의사 (즉, GeneralDoctor 또는 Dentist)

1

Collection <? extends myObject>은 myObject와 myObject를 확장하는 객체를 모두 Collection에 넣을 수 있다는 것을 의미합니까?

실제로는 컬렉션이 myObject으로 확장되는 특정 유형의 컬렉션임을 의미합니다. 더 명확한 예를 들자면 Collection<? extends Number> 인 경우 Collection<Integer> 일 수도 있고 Collection<Double> 일 수도 있고 Collection<Number> 일 수도 있습니다.

따라서 제네릭 형식이 무엇인지 모르기 때문에 컬렉션에 아무 것도 추가 할 수 없습니다. 그러나 해당 컬렉션에서 요소를 얻으면 Number이라는 것을 확신 할 수 있습니다.

List<? extends Number> c = getList(); 
Number n = c.get(0); //ok 
c.add(1); //not ok, c could well be a List<BigDecimal>, we don't know 
+0

명확한 설명에 감사드립니다. 시간이 있으면 다른 질문이 있습니다. c.add (1)을 수행 할 수 없다면 이는 프로그래밍 방식으로 콜렉션을 작성한 다음 채울 수 없다는 것을 의미합니다. 이렇게하면 MDP

+1

컬렉션의 정확한 유형을 알 필요가없는 곳에 사용할 수 있습니다. 그러나 일반적으로 메서드가 해당 형식을 반환 할 때 사용합니다 (예를 들어, 내 예제를 기반으로 :'public Collection getList() {...}'). – assylias

1

일반적인 방법이라고합니다. 이 모든 개념을 Java의 "Generics"라고합니다. 이 선언은 T가 myObject의 하위 클래스 인 어떤 유형이 될 수도 있음을 의미합니다.

관련 문제