javase高级技术 - 泛型

时间:2024-11-25 18:03:02

在写案例之前,先简单回顾下泛型的知识

我们知道,java属于强变量语言,使用变量之前要定义,并且定义一个变量时必须要指明它的数据类型,什么样的数据类型赋给什么样的值。

所谓“泛型”,就是“宽泛的数据类型”,任意的数据类型。我们用<>来表示。

可以用在类上public class a<T>

可以用在接口上public interface  a<T>

可以用在方法的返回值上 public <T> T a();

泛型类在定义的时候可以不指定类型,但是在使用的时候必须制定类型,也就是new的时候

泛型通配符

<T extends Object>  只能是Object类以及他的子类

<T superObject>  只能是Object类以及他的父类

============分割线===================

案例 在参数定义int的集合中,添加String 元素

List<Integer> list = new ArrayList<Integer>() 中添加字符串

	@Test
public void test() throws Exception, NoSuchMethodException
{
List<Integer> list = new ArrayList<Integer>();
Class listClass= list.getClass();
Method addMethod = listClass.getMethod("add", Object.class);
addMethod.invoke(list,"aaaaa");
System.out.println(list.get(0)); //输出为aaaaaa 测试成功 查看源码发现add的底层添加的是Object
}

  

总结: java中的泛型其实是给编译器看的,编译过程中会有一个【泛型擦除】的过程,在字节码中已经看不到定义的类型了。