构造函数的重载之泛型和基本类型调用分析
在定义http公共响应数据格式的时候,需要重载构造方法,对于public ResultVO(Integer code, String msg)
方法和 public ResultVO(Integer code, T data)
方法,在面对两个参数的时候,会调用哪一个方法呢?
下面我来进行测试:
/**
* @author: chunxiao
* @description: http响应公共数据
* @date: created in 23:31 2018/1/30
*/
public class ResultVO<T> implements Serializable {
private Integer code;
private String msg;
private T data;
public ResultVO(Integer code) {
this.code = code;
}
public ResultVO(Integer code, String msg) {
this.code = code;
this.msg = msg;
//TODO 测试需要
System.out.println("-------ResultVO(Integer code, String msg)");
}
public ResultVO(Integer code, T data) {
this.code = code;
this.data = data;
//TODO 测试需要
System.out.println("+++++++++ResultVO(Integer code, T data)");
}
public ResultVO(Integer code, String msg, T data) {
this.code = code;
this.msg = msg;
this.data = data;
}
//TODO 测试需要
public static void main(String[] args) {
ResultVO res = new ResultVO(1, new Object());
ResultVO res2 = new ResultVO(2, "hello world!");
}
}
运行结果:
+++++++++ResultVO(Integer code, T data)
-------ResultVO(Integer code, String msg)
结论:
new ResultVO(1, new Object())
会调用ResultVO(Integer code, T data)
方法给res对象中的code
和data
赋值;
new ResultVO(2, "hello world!")
会调用ResultVO(Integer code, String msg)
方法给res2的code
和msg
赋值;