什么是泛型?
对数据类型进行限定,应用最多的地方是集合。
为什么要使用泛型?
1、提高程序的安全性
2、将运行阶段的问题在编译阶段解决
3、不用进行类型的强制转换
学习泛型的目的:会使用集合上定义的泛型。
1、集合上泛型的基本使用
2、自定义泛型
在类上或接口上定义泛型
class 类名<>
{
}
interface 接口名<>
{
}
在静态方法上声明泛型
修饰符 <>返回值 方法名()
{
}
package cn.itcast.generic;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
public class Demo {
@Test
public void fun1()
{
show("abc");//这时show方法上的T描述的就是String
show(10);//这时show方法上的T描述的就是Integer
}
//1、定义两个方法,繁琐
public void show(String s)
{
System.out.println(s);
}
public void show(int i)
{
System.out.println(i);
}
//2、使用Object来描述我们的信息,类型模糊,在使用时需要手动转型
//可能出现ClassCastException类型转化异常
// public void show(Object object)
// {
// System.out.println(object);
// }
//3、使用泛型
public <T>void show(T t)
{
System.out.println(t);
}
//Collection<E> List<E> Set<E>它们的作用是限定集合中元素的类型。
public void fun2()
{
List<String> list=new ArrayList<String>();
}
@Test
public void fun3()
{
GenericDemo1<String> d=new GenericDemo1<String>();
d.print("hello");
}
}
在类上声明的泛型不可以在类方法(static)或者类属性(static)上使用。因为类上声明的泛型,只有在创建对象时才能进行类型传。而静态成员不需要对象就可以调用。但是可以在静态方法上声明泛型。
package cn.itcast.generic;
public class GenericDemo1<T> {//类上声明一个泛型
//成员属性
T t;
//成员方法
static int a=10;
// static T b=10;
public static String demo1()
{
return null;
}
// public static T demo2()
// {
//
// }
public T print(T s)
{
return s;
}
//在类上声明的泛型不可以在类方法(static)或者类属性(static)上使用。
//因为类上声明的泛型,只有在创建对象时才能进行类型传。
//而静态成员不需要对象就可以调用
public void demo(String s)
{
System.out.println(s);
}
//在静态方法上定义泛型
public static <K> K show(K k)
{
return k;
}
}