泛型
来源:互联网 发布:淘宝上新率多少合格 编辑:程序博客网 时间:2024/06/17 09:13
1)参数化类型概念
2)类接口上的泛型
public interface Generator<T> { //<T>确定参数或者返回值类型T next();public void test(T t);}3)方法上的泛型
public class Simple {public <T> void test(T t){ //<T> 确定参数类型或者返回值属于此类型,但是此例子没实际作用}}3)带返回值的泛型方法
public class SimpleList {public static <T> List<T> test(T... args){ //返回值的泛型值必须与参数一致List<T> list = new ArrayList<T>();for(T arg: args){list.add(arg);}return list;}}4)参数中带<>
public class SimpleList {public <T> void test(List<T> t){ }}
public class SimpleList {public <T> T test(T t){return t;}}
public class SimpleList {public <T> List<T> test(T t){List<T> list = new ArrayList<T>();list.add(t);return list;}}5)类与方法结合
public class SimpleList<T> { //类中有<>,则在方法返回值前不必带<>public void test(T t){List<T> list = new ArrayList<T>();list.add(t);}}
总结:
①泛型类是创建类时明确参数类型,比如ArrayList,<>内确定参数类型,但是泛型方法是方法参数决定参数类型,比如例子3,调用方法时,不会带<>来决定类型,但是方法返回值前带<>,前提类中不带<>
②类名上有<>,则在方法返回值前不带<>
6)擦除
泛型其实在运行是是不知道泛型参数的
List<String>和List<Integer>其实相同的类型,在没有边界的情况下,泛型T t 中的t只能调用Object的方法
7)泛型中不能做的操作
a instanceof T
T var = new T()
T[] array = new T[10]
8)用工厂方法创建实例,其实就是用Class创建,但是要注意应该拥有构造器
public class ClassAsFactory<T> {private Class<T> t;public ClassAsFactory(Class<T> t){this.t = t;}public T create() throws InstantiationException, IllegalAccessException{return t.newInstance(); }}缺点:如果遇到没有默认构造方法的则会报错,但是在编译期是发现不了的,比如Integer,所以不推荐用这种方法
推荐做法:
public interface FactoryI<T> {T create();}
public class IntegerFactory implements FactoryI<Integer>{@Overridepublic Integer create() {return 0;}}
1 0