是的,我多次考虑过同样的问题。
假设(有 xx 原因为什么它不是这样)如果泛型构造函数可以为整个类定义正式的泛型类型(就像泛型类声明那样)会很好......也就是说,如果定义 Generic构造函数会让你在那个类中有通用字段......
例如,如果您想避免泛化:
EntityRequestCallback extends RequestCallback
但是您希望 RequestCallback 是通用的 RequestCallback<E extends Entity>,您不能这样做,因为只有两种类型的请求 PUT/POST 使用实体。只有 PUT/POST 请求的构造函数包含实体参数。
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;
}
}
但是该类不能是通用的,因为您将为没有实体的请求创建 RequestCallback,这意味着您将实例化
new RequestCallback(); //without specifying generic parameter - worse than nothing
所以这里唯一可能的方法是泛化:
EntityRequestCallback<E extends Entry> extends RequestCallback
这样您就可以拥有通用字段:
public E entity;
在这个特定示例中,无论如何,泛化是正确的选择,但在某些情况下,泛化不会。