泛型

来源:互联网 发布:淘宝上新率多少合格 编辑:程序博客网 时间: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
原创粉丝点击