<T>与String

来源:6-2 登录功能开发

Roger9943

2019-12-18

泛型与String的一些思考

写回答

1回答

Roger9943

提问者

2019-12-18


public static <T>T  test(T datas){
   return datas;
}
public static void main(String[] args) {

   String s="123";
   ServiceResponse a=creatBySuccess(s);
   ServiceResponse b=creatBySuccessMessage(s);
   ServiceResponse c=new ServiceResponse(0,s);
   ServiceResponse d=new ServiceResponse(0,"321");
   ServiceResponse e=new ServiceResponse(0,"123");
   ServiceResponse f=new ServiceResponse(0,test("123"));
   //new ServiceResponse(0,s);
   System.out.println("");
}

上面的测试代码可以帮助一下理解泛型,

我觉得就是<T>和String选择的问题上,creatBySuccess和creatBySuccessMessage相当于在上面包装了一层,泛型在最下面ServiceResponse()初始化的时候,要往上找到类型,

在ServiceResponse(<T>),ServiceResponse(String)选择的时候,creatBySuccess(<T>)是从return new ServiceResponse<T>(ResponseCode.SUCCESS.getCode(),data);中往上找到的data是T类型,也就是走的creatBySuccess(T)->ServiceResponse(T)->data这条路线,传的是T,不论T是不是String都要使用ServiceResponse(T)这个方法。

在creatBySuccess(<T>)中确定类型是T而不是String。直到正式编译的时候,再给String,那么String只能走这条路。

我画的图,便于大家理解。

,这是包装后的,就可以想让String走那条路就调用哪条。

不然默认调用String,第二张图就是String比<T>优先,

换个说法,就是把一开始程序判断ServiceResponse()参数的T还是String,给分开了,提前把数据处理为一个T一个String,不会发生让String和T数据混合一起的判断。

个人理解,多多包涵。

//img1.sycdn.imooc.com/szimg/5dfa23af093fa7da06970661.jpg

//img1.sycdn.imooc.com/szimg/5dfa247f09efb53d06690557.jpg

1
0

从0开始 独立完成企业级Java电商网站服务端开发

前后端分离,数据库接口设计,架构设计,功能开发,上线运维

9487 学习 · 8814 问题

查看课程