泛型

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>{
	@Override
	public Integer create() {
		return 0;
	}
}





  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值