今天看 hutool 的工具类的时候遇到一个方法,
public static <T> boolean isEmpty(final T... array) {
return array == null || array.length == 0;
}
一、对 public static <T> boolean isEmpty(final T... array) 中的多个 T,和 三个点点不甚理解,于是通过各种百度理解了一番,在这里整理解释一下。
其实这里是缩写,完整版应该是这样的:
public <Type extends Object> static List<Type> asList(Type... a)
T是个泛型的类型,三个T表示同一种类型,就是List的元素类型,他们有不同作用
第一个T:为了显式告诉编译器,该泛型的类型
第二个T:表示返回值,就像正常我们在方法名前面加的返回值类型一样,这里是泛型表示,所以写作List<T>
第三个T:表示传入的参数
以上参考自:http://tieba.baidu.com/p/4033681041 (感谢)
二、至于那三个点点是可变参数的意思(好久没用,居然忘记了,此处权当复习了),关于可变参数,这里举个简单的例子,你就懂了:
public class GenericTest {
/**
* 求所有传入数值的和
* @param args 可变参数,表示多个数组的组合
* @return 传入数字的总和
*/
public static int getSum(int... args) {
int sum = 0;
for (int arg : args) {
sum += arg;
}
return sum;
}
// 测试
public static void main(String[] args) {
int[] intArray1 = {1, 2, 3};
System.out.println(getSum(intArray1));
System.out.println(getSum(2, 3, 4, 5));
}
}
你会发现这个可变参数是个很好用的东西,数组数字都可以传进去进行处理,但是可变参数在使用时也有一些要注意的地方,这里就不多讲了,大家可以自行百度。
三、为什么方法参数前要用 final 修饰
我一开始猜测了一下用意,百度发现我的猜测是对的,但是人家说得很好
1、常量设置为 final,为了防止程序员在以后修改程序时,无意间修改了这个不用改修改的值,毕竟程序员的工作不是一个人的工作,你设置为 final,不管是自己以后看,还是别人看的时候,都会立刻知道该值不能改动。
2、另外final常量一般设置为static的,一定程度上节省了内存开销。
3、如果 final修饰的是引用型变量,那么它就表示不可以改变它的内存地址,但是值是可以变动的。比如 final Map map,它不允许你这样:map = new HashMap(); 但是允许你这样:map.put("aaaa", "1111")
第三点感谢百度知道的贡献:https://zhidao.baidu.com/question/336562093.html