<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数据混合一起的判断。
个人理解,多多包涵。
10
相似问题