泛型作为返回值

djcjcdj 2017-11-18 10:57:56
如何理解下面代码中
<T>ServerResponse<T>
;两个泛型的使用,为什么需要第一个<T>,表示什么意思?
package com.mmall.common;

import org.codehaus.jackson.annotate.JsonIgnore;
import org.codehaus.jackson.map.annotate.JsonSerialize;

import java.io.Serializable;
import java.util.List;

/**
* Created by CJ on 2017/11/16.
*/
@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
public class ServerResponse<T> implements Serializable{
private int status;
private String msg;
private T data;

public ServerResponse(int status) {
this.status = status;
}

public ServerResponse(int status, String msg) {
this.status = status;
this.msg = msg;
}

public ServerResponse(int status, T data) {
this.status = status;
this.data = data;
}

public ServerResponse(int status, String msg, T data) {
this.status = status;
this.msg = msg;
this.data = data;
}

@JsonIgnore
public boolean isSuccess(){
return this.status ==ResponseCode.SUCCESS.getCode();
}

public int getStatus() {
return status;
}
public String getMsg() {
return msg;
}
public T getData() {
return data;
}

public static <T> ServerResponse<T> createBySuccess(){
return new ServerResponse<T>(ResponseCode.SUCCESS.getCode());
}

public static <T>ServerResponse<T> createBySuccessMessage(String msg){
return new ServerResponse<T>(ResponseCode.SUCCESS.getCode(),msg);
}

public static <T>ServerResponse<T> createBySuccess(T data){
return new ServerResponse<T>(ResponseCode.SUCCESS.getCode(),data);
}

public static <T>ServerResponse<T> createBySuccess(String msg, T data){
return new ServerResponse<T>(ResponseCode.SUCCESS.getCode(),msg,data);
}

public static <T>ServerResponse<T> createByError(){
return new ServerResponse<T>(ResponseCode.ERROR.getCode(),ResponseCode.ERROR.getDesc());
}

public static <T>ServerResponse<T> createByErrorMessage(String ErrorMessage){
return new ServerResponse<T>(ResponseCode.ERROR.getCode(),ErrorMessage);
}

public static <T>ServerResponse<T> createByErrorCodeMessage(int ErrorCode,String ErrorMessage){
return new ServerResponse<T>(ErrorCode,ErrorMessage);
}
}
...全文
372 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
js搬运工 2021-07-30
  • 打赏
  • 举报
回复 1

ServerResponse对于这个想了很久,也看了老师的解释,个人理解为:
public static ServerResponse createBySuccess(){}不加第一个是声明了一个方法,一个有泛型作为返回值的函数方法,
然后加上第一个是说声明此方法持有一个类型T,也可以理解成,将此方法声明为泛型方法,第一个记住是持有的意思,如果不持有,
后面的Serv会报错

weixin_38076590 2018-12-05
  • 打赏
  • 举报
回复
前面的T的声明,跟类后面的 <T> 没有关系,方法前面的<T>是给这个方法级别指定泛型。

50,523

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧