public Fan() {
List animas = new ArrayList<>();
List cats = new ArrayList<>();
List miniCats = new ArrayList<>();
// setList(animals);
setList(cats);
setList(miniCats);
}
/**
* MiniCat extends Cat extends Animal
* 通配符 super 决定了下限,只要是Cat或者是Cat继承了类都可以填入
*
* @param list
*/
public static void setList(List extends Cat> list) {
}
public Fan() {
List animals = new ArrayList<>();
List cats = new ArrayList<>();
List miniCats = new ArrayList<>();
setList(animals);
setList(cats);
//setList(miniCats);
}
/**
* MiniCat extends Cat extends Animal
* 通配符 super 决定了下限,只要是Cat或者是Cat继承了类都可以填入
*
* @param list
*/
public static void setList(List superCat> list) {
}
public static void comparatorAnimal() {
/*TreeSet内部比较
TreeSet(Comparator super E> comparator)
用Comparator1就是比较name
用Comparator2就是比较age
*/
Set catSet = new TreeSet<>(new Comparator1());
catSet.add(new Cat("bao6", 1));
catSet.add(new Cat("bao1", 5));
catSet.add(new Cat("bao2", 3));
catSet.add(new Cat("bao5", 6));
catSet.add(new Cat("bao4", 2));
for (Cat cat : catSet) {
Log.d("baozi", cat.toString());
}
}
/**
* 对比name
*/
static class Comparator1 implements Comparator {
@Override
public int compare(Anima o1, Anima o2) {
return o1.name.compareTo(o2.name);
}
}
/**
* 对比age
*/
static class Comparator2 implements Comparator {
@Override
public int compare(Cat o1, Cat o2) {
//比较参数
return o1.age - o2.age;
}
}
/**
* 对比num,这里就不能用Comparator3 ,因为是 super E >
*/
static class Comparator3 implements Comparator {
@Override
public int compare(MiniCat o1, MiniCat o2) {
return o1.num - o2.num;
}
}
public class Fan {
private T t;
public Fan(T t) {
this.t = t;
}
public T getT() {
return t;
}
/**
* 泛型不能用静态方法,因为类初始化没声明泛型
*
* @param t
*/
public void setT(T t) {
this.t = t;
}
/**
* 泛型方法里面的T不受外部类T的影响
* 所以可以用静态
*
* @param t
* @param
*/
public static void setT2(T t) {
}
}
class Father {
}
/**
* 子类不是泛型什么都不写
* 等价于Child extends Father
/**
* 泛型接口
* @param
*/
interface Man {
void setData(E e);
E getData();
}
/**
* 不写具体参数,默认就是Object
*/
class MiniMan implements Man{
@Override
public void setData(Object o) {
}
@Override
public Object getData() {
return null;
}
}
/**
* 写具体类型
*/
class BigMan implements Man{
@Override
public void setData(String s) {
}
@Override
public String getData() {
return null;
}
}
public class TestArray {
//不能声明带泛型的数组,因为数组类型在创建时就确定要类型了
//T[] tList = T[5];
//可以这样定义
private ArrayList[] arrayLists = new ArrayList[5];
private T[] array;
public TestArray(Class clz,int length) {
array = (T[]) Array.newInstance(clz,length);
}
public T getData(int index){
return array[index];
}
public void put(int index,T item){
array[index] = item;
}
public T[] getArray(){
return array;
}
}
TestArray testArray = new TestArray<>(String.class, 5);
testArray.put(0, "baozi0");
testArray.put(2, "baozi2");
testArray.put(1, "baozi1");
testArray.put(4, "baozi4");
testArray.put(3, "baozi3");
Java中的泛型方法
哔哩哔哩视频
如果有写的不对,希望大家帮忙指出错误,谢谢!