당신은 코멘트에 쓴 :
내가 거기에 이유가 <Ackr extends Cloneable>
을위한 없지만, 어떤 맥락에서이 구조가 나을 거 같아?
이것은 메서드에 대한 형식 매개 변수입니다.
public <Ackr extends Cloneable> Ackr getInstance(){ ... }
은 Cloneable을 확장하는 일부 유형의 객체 (호출자가 선택할 수 있음)를 반환하는 메소드를 정의합니다. 이 메소드는 합법적으로 null
만을 반환 할 수 있습니다. 호출자가 어떤 유형으로 선택되었는지, null
이 모든 참조 유형에서 유일한 값이므로) 예외를 throw하므로 실제로 유용하지 않습니다. 당신은 더 나은이처럼 작성합니다 있도록
여기 유형 매개 변수 Ackr
는 같은 이름의 당신의 열거 클래스에 관련이 없습니다 :
public <A extends Cloneable> A getInstance(){ ... }
유형의 같은 용도가 자바 API의 몇 가지 사례가있다 매개 변수는 반환 형식에서만 사용되지만 일부 매개 변수가있는 형식을 반환합니다. 메서드의 형식 매개 변수는 반환 형식의 형식 매개 변수로 사용됩니다. 예를 들어 Collections.emptySet()
을 찾으십시오.
보다 자주 메서드의 매개 변수 유형이 메서드의 매개 변수 유형 (반환 유형에만 추가되거나 추가됨)에서 사용됩니다.
public <A> A getFirstElement(Iterable<A> list);
이 방법은 몇 가지 유형 A의의 Iterable 소요되며,이 유형 A의 객체를 반환 (이름에서, 하나는이 반복자의 첫 번째 요소를 취한다고 가정한다.일반적으로
public <A> A getFirstElement(Iterable<A> list) {
Iterator<A> it = list.iterator();
if(it.hasNext()) {
return it.next();
}
return null;
}
:) 여기에 구현 한 것입니다 당신이 형식 매개 변수를 (어디서나)이있는 경우, 당신은 여기처럼 당신이 (일부 기존 유형과 같은 그 이름을 지정하지 있는지 확인하시기 바랍니다) -이 과 같은 이상한 오류 메시지로 인해 큰 혼란을 낳을 수 있습니다. Ackr은 Ackr에 할당 할 수 없습니다.
이
는 이유 유형 매개 변수는 종종 (맵의 키와 값 타입),
T
(일반 타입) 하나 (또는 드물게 2 개)
E
(요소 형) 같은 캐릭터 이름,
K
,
V
을 가지고있다.
'public Ackr getInstance() {...}'의 문제점은 무엇입니까? 또는, 왜 그런 이유로'getInstance()'가 필요합니까? – skaffman
열거 형을 복제 할 수 없습니다 ... 이것은 단지 의미가 없습니다. – maaartinus