2011-10-13 5 views

답변

3

<?> 구문은 제네릭 형식은 "무제한의"임을 지정하는 자바의 방법입니다 - 그것은 "아무것도"할 수있다, 즉.

Enumeration<?>

는 "무제한의 유형"에 열거 - 당신은 예를 들어, 같은 변수에 어떤 유형의 열거를 할당 할 수

Vector<String> v = new Vector<String>(); 
Enumeration<String> es = v.elements(); 
Enumeration<?> e = es; // This assignment compiles OK 

을하지만,의는 nextElement() 메소드를 억제 할 것 배경에 대한

String s = (String)e.nextElement(); // Unsafe cast - compiler warning 


,: 당신이 캐스팅 할 수도 있습니다 반환 형식 Object (이것은 실제로 Enumeration<String>을 경우에도)와 Enumeration<?>, 그래서은 두 가지 방법 (hasMoreElements()nextElement())이있는 입력 된 인터페이스입니다. 이른 (가난한) 시도는 IterableIterator으로 대체되었습니다. 예전 클래스 인 VectorStringTokenizer을 사용합니다.

+0

... 및 Servlet API : p –

0

? 와일드 카드 문자입니다. 당신은 그것을로 표현할 수 있습니까? 동일한 효과를 갖는 정렬 객체 또는 무언가를 확장합니다. 나의 이해에서 와일드 카드는 자바에서 지금까지는 예술이 아니며 다소 제한적일 필요가있다. 그러나 그 말을 인용하지 않는다.

2

물음표는 그것이 모든 유형을 나타내는 것을 나타낸다. 여기 example의 :이 콘크리트 인스턴스화 이른바 와일드 카드 인스턴스화 외에도

. 형식 인수로 구체 형식 인 이 없지만 소위 와일드 카드라고합니다. 와일드 카드는 하나의 유형뿐만 아니라 유형의 계열을 나타내는 " ?"이있는 구문 구조입니다. 에서 가장 간단한 형식의 와일드 카드는 물음표이며 "all 유형"을 나타냅니다. (와일드 카드 파라미터 화 된 형태의)

예 :

public void printPair(Pair<?,?> pair) { 
System.out.println("("+pair.getFirst()+","+pair.getSecond()+")"); 
} 

Pair<?,?> limit = new Pair<String,Long> ("maximum",1024L); 
printPair(limit); 
2

?을 "모든"또는 "모든"유형을 나타내는 것으로 생각하는 것은 유감이지만 실제로는 알 수없는 단일 유형을 지정합니다.

List<?> l = ... 
l.add("foo"); 
l.add(new Date()) 

을하지만 그렇지 않습니다 : 그것은 정말 "모든"인 경우에, 당신은이 작업을 기대. 이것은이 코드에서 유형을 알 수 없기 때문에 컴파일러는 아무 것도 추가 할 수 있어야하는지 여부를 알 수 없습니다.

관련 문제