그래, 나는 몇 번 같은 생각을하고있었습니다.
가설 적으로 (xx 이유는 왜 이렇게되지 않습니까?) Generic 생성자가 전체 클래스에 대해 공식 generic 유형을 정의 할 수 있다면 좋을 것입니다. (generic 클래스 선언 에서처럼)
EntityRequestCallback extends RequestCallback
있지만 RequestCallback, 당신은 그렇게 할 수없는 일반적인 RequestCallback<E extends Entity>
되고 싶어 : 당신이 일반화을 피하고자한다면 일반 생성자는 예를 들어
... 당신이 그 클래스의 일반적인 필드가 할 것 요청 PUT/POST의 두 가지 유형 만 Entity를 사용하기 때문입니다. PUT/POST 요청의 생성자 만 Entity 매개 변수를 포함합니다.
public class RequestCallback {
/** GET/DELETE requests */
public RequestCallback(String gttUrl, HttpMethod method,) {
this.gttUrl = gttUrl;
this.method = method;
}
/** PUT/POST requests */
public RequestCallback(String gttUrl, HttpMethod method, Entity entity) {
this.gttUrl = gttUrl;
this.method = method;
this.entity = entity;
}
}
그러나 당신은 당신이
new RequestCallback(); //without specifying generic parameter - worse than nothing
를 인스턴스화 할 의미 엔티티를하지 않는 요청에 대한 RequestCallback를 생성 할 것이기 때문에 클래스는 일반 수 없습니다 그래서 여기에 유일한 방법 이다 일반화 : 당신이 할 수 있도록
EntityRequestCallback<E extends Entry> extends RequestCallback
일반 필드 :
public E entity;
이 특정 예에서는 일반화가 올바른 선택이지만 일반화는 그렇지 않을 수도 있습니다.
그래, 제네릭 메서드를 생성자로 대체 할 수 있습니다 (하지만 원하는 이유는 무엇입니까?). 나는 야생에서 실제로 본 적이 없다. 내 돈으로, 언어가 (Java generics의 버전을 발표 할 때 C#을 사용했을 때와 같이) 언어가없이 할 수 있었던 것은 복잡합니다. –