自定义泛型接口

自定义泛型接口

注意点
1.泛型类可能有多个参数,此时应该讲多个参数一起放在尖括号内,比如<E1,E2,E3>
2.泛型类的构造器与普通构造器相同,不用带尖括号
正确示例

public GenericClass(){}

错误示例

public GenericClass<E>(){}

3.实例化后,操作原来泛型位置的结构必须与指定的泛型类型一致
4.泛型不同类型的引用不能相互赋值
如以下两个变量不可相互赋值

ArrayList<String> als= new ArrayList<> ();
ArrayList<Integer> ali= new ArrayList<> ();

5.泛型吐过不指定,将会被擦除,泛型对应的类型均按照Object处理,但不等价于Object。尽量实例化泛型
6.如果泛型是一个接口或抽象类,则不可创建泛型类的对象
7.jdk1.7,泛型可简化,在等号右边不写,在左边写
8.泛型的指定中不能使用基本数据类型,可以使用包装类替换
9.在类、接口上声明的泛型,在本类或本接口中即代表某种类型,可以用于非静态属性的类型,非静态方法的参数类型和返回值类型,在静态方法中不能使用类的泛型,原因:类的泛型是实例化的时候确定的,静态方法使用的时候无法获取该参数
10.异常类不能是泛型的
11.不能使用new E[] 但是可以 E[] elements=(E[])new Object[capacity];
参考:ArrayList源码中声明 Object[] elementData, 而非泛型参数类型数组
这个感觉很不好用呢。。。

package com.atguigu.generic;

import java.util.Arrays;

/**
 * 功能描述
 *
 * @since 2022-05-25
 */
public class GenericArray<E> {

    E[] createGenericArray(int capacity) {
        E[] es = (E[]) new Object[capacity];
        return es;

    }


    public static void main(String[] args) {
        GenericArray<String> genericArray = new GenericArray<>();
        Object[] array = genericArray.createGenericArray(10);
        array[0] = "as";
        array[1] = 12;
        System.out.println(Arrays.toString(array));
    }
}

12.父类有泛型,子类可以选择保留泛型也可以选择指定泛型类型:
子类不保留父类的泛型:按需实现
没有类型 擦除
具体类型
子类父类的泛型,泛型子类
全部保留
部分保留
结论:子类必须是'富二代',子类除了指定或保留父类的泛型,还可以增加自己的泛型

class Father<T1, T2> {
}

//子类不保留父类的泛型
// 1)没有类型 擦除
class Son1 extends Father{//等价于class Son2 extends Father<Object,Object>{
}
// 2)具体类型
class Son2 extends Father<String, Integer>{
}

//子类保留父类的泛型
// 1)全部保留
class Son3<T1, T2> extends Father<T1, T2>{
}
// 2)部分保留
class Son4<T2> extends Father<Integer>, T2>{
}

//子类不保留父类的泛型
// 1)没有类型 擦除 Son5保留了父类泛型的基础上自己又增加两个类型
class Son5<E1, E2> extends Father{//等价于class Son2<E1, E2> extends Father<Object,Object>{
}
// 2)具体类型 Son6实例化了父类泛型的基础上自己又增加两个类型
class Son6<E1, E2> extends Father<String, Integer>{
}

//子类保留父类的泛型
// 1)全部保留
class Son7<T1, T2,E3, E4> extends Father<T1, T2>{
}
// 2)部分保留
class Son8<T2, E3> extends Father<Integer>, T2>{
}
posted @ 2022-05-25 21:01  Oh,mydream!  阅读(100)  评论(0编辑  收藏  举报