泛型(generic)类型在 Java 中使用特别频繁, 尤其在各种集合类(Collection)中. 一般如果自定义的类要使用泛型, 那么需要在类定义的时候, 声明泛型, 如:public class MyClass {...}
那么, 如果想在类的静态方法里上使用泛型, 以及如何在调用的时候, 传入泛型类型呢?静态方法上在 static 关键字之后, 声明泛型:public static Builder builder() {...}调用静态方法在.之后, 方法之前:MyResponse.builder().status(0).result(new MyReturnType()).build();
比如, 我们在各种 API 经常用的这类返回结果的类:public class ApiResponse {
public static Builder builder() {
return new ApiResponse.Builder();
}
public ApiResponse(int status) {
super();
this.status = status;
}
public ApiResponse(int status, T result) {
super();
this.status = status;
this.result = result;
}
private int status;//0 is success, others are all
private String errCode;
private String errMsg;
private T result;
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public String getErrCode() {
return errCode;
}
public void setErrCode(String errCode) {
this.errCode = errCode;
}
public String getErrMsg() {
return errMsg;
}
public void setErrMsg(String errMsg) {
this.errMsg = errMsg;
}
public Object getResult() {
return result;
}
public void setResult(T result) {
this.result = result;
}
static class Builder {
private int status;//0 is success, others are all
private String errCode;
private String errMsg;
private T result;
public Builder status(int status) {
this.status = status;
return this;
}
public Builder errCode(String errCode) {
this.errCode = errCode;
return this;
}
public Builder errMsg(String errMsg) {
this.errMsg = errMsg;
return this;
}
public Builder result(T result) {
this.result = result;
return this;
}
public ApiResponse build() {
ApiResponse rsps = new ApiResponse(status, result);
rsps.setErrCode(errCode);
rsps.setErrMsg(errMsg);
return rsps;
}
}
}