泛型
1、简单介绍
所谓的泛型,就是不知道确定哪种数据类型的时候,加的一种占位符方式。
泛型和Object的区别是什么?最经典的一种场景使用方式:
List list = new ArrayList();
list.add("hello");
list.add(false);
list.add(0.22);
list.add(52);
list.add('a');
for (Object o : list) {
// 输出没有任何问题
System.out.println(o);
// 但是针对于某种类型,我们还是得自己来进行处理
}
上面这种模式是非常经典的一种使用场景,但是缺点就是说:集合中的元素类型太杂了,放进去的时候方便,但是取出来的时候不方便。
所以为了操作的便利性,将集合中的数据规定性一致的。所以需要来添加一个约束。而泛型就适用于这种场景。
当我们指定了泛型的类型之后,那么再放入数据的时候,只让放的数据是泛型指定的类型的,如下:
List<String> list = new ArrayList<>();
list.add("helloworld");
list.add("world");
list.add("hello");
for (String s : list) {
System.out.println(s);
}
这个只是介绍下泛型的好处。在使用的时候,指定泛型类型,指定完成之后,那么这个类型就确定好了。
泛型类,这个可以参考着ArrayList来操作:
// 泛型在里面的使用方式
public class ArrayList<E>{
// set方法。
public E get(int index) {
rangeCheck(index);
return elementData(index);
}
public E set(int index, E element) {
rangeCheck(index);
E oldValue = elementData(index);
elementData[index] = element;
return oldValue;
}
}
2、泛型方法
泛型方法参考
// 在方法声明的时候加上<T>即可。这里和类中的泛型是没有关系的。
public <T> T[] toArray(T[] a) {
if (a.length < size)
// Make a new array of a's runtime type, but my contents:
return (T[]) Arrays.copyOf(elementData, size, a.getClass());
System.arraycopy(elementData, 0, a, 0, size);
if (a.length > size)
a[size] = null;
return a;
}
3、泛型类
最常见一种用法:
public class Response<T> {
// 响应业务状态
private Integer status;
// 响应消息
private String msg;
// 响应中的数据
private T data;
// getter/setter方法
}