萌新真的是被泛型折磨的够呛
这都是啥啊…
泛型
泛型提供了参数化类型,即在定义类、接口、方法时使用一个不确定的类型进行定义,在实现时最终被具体的类型替换
泛型传入的类型必须是引用类型
泛型在一定程度上提供在编译时检查类型的安全性,避免通用类Object进行强转带来的类型不合法问题。
eg:
public class Student<T> { //T即为泛型,可以被任意引用类型替换
private T age; //可以是Integer、String...
public T getAge(){
return age;
}
}
泛型数组
泛型无法直接构建数组( new T[5] ),需要使用的时候可以通过Object类与强制类型转换达到数组的效果。
public class GenericArray<T> {
private Object[] array;
private int pos; //数组指针
public GenericArray(int len) {
array = new Object[len];
pos = 0;
}
public void put(T val) {
if (pos < array.length) {
array[pos++] = val;
}
}
public T get() {
if (pos >= 0 && pos <= array.length) {
return (T)array[--pos]; //需要强制类型转换
} else {
return null;
}
}
public void set(int index, T val) {
//这里val不要用Object,否则合法类型过多,无法保证类型一致性
if (index >= 0 && index <= array.length) {
array[index] = val;
}
}
public static void main(String[] args) {
GenericArray<Integer> ga = new GenericArray<>(5);
ga.put(11);
System.out.println(ga.get());
}
}
泛型接口
一个普通类实现泛型接口
interface Builder<T> {
T doSomething();
}
public class GenBuilder implements Builder<String>{
//这里直接确定T的类型为String(当然也可以是T,这样在return时就需要另外处理)
private int num = 0;
public String doSomething() {
return "String " + num++;
}
public static void main(String[] args) {
GenBuilder gb = new GenBuilder();
for(int i = 0; i < 3; i++){
System.out.println(gb.doSomething());
}
}
}
to be continue…
后面的有缘(学会了)再更新