1.为什么会有泛型呢?
早期的Object类型可以接受任意的对象类型,但是在实际使用中,会有类型转化的问题,存在隐患,所以Java提供泛型解决这个安全问题
2.什么是泛型?

泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。

泛型的本质是为了参数化类型(在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型)。也就是说在泛型使用过程中,操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。
3.泛型的使用
泛型有三种使用方式,分别为:泛型类、泛型接口、泛型方法
(1) 泛型类
把泛型定义在类上
格式:public class类名<泛型类型,…>
注意:泛型类型 必须是引用类型
//一个泛型类 public class ObjectTool<E> { private E obj; public E getObj() { return
obj; } public void setObj(E obj) { this.obj = obj; } } // 泛型类测试 public class
ObjectToolDemo { public static void main(String[] args) { ObjectTool<String>
obj=new ObjectTool<String>(); obj.setObj("张三"); String s=obj.getObj();
System.out.println(s); } }
(2)泛型方法
把泛型定义在方法上
格式:public<泛型类型>返回类型 方法名(泛型类型)
//泛型方法 public class ObjectTool{ public <T> void show(T t) { } } //测试 public
class ObjectToolDemo { public static void main(String[] args) { ObjectTool
obj=new ObjectTool(); obj.show(1); obj.show("hello"); obj.show(true); } }
(3)泛型接口
把泛型定义在接口上
格式:public interface接口名<泛型类型>
//定义泛型接口 public interface Inter<T> { public abstract void show(T t); } //实现接口
public class InterfaceImpl<T> implements Inter<T>{ public static void
main(String[] args) { } public void show(T t) { } } //测试 public class
InterfaceDemo { public static void main(String[] args) { //接口测试 Inter<String>
i=new InterfaceImpl<String>(); i.show("hello"); Inter<Integer> i2=new
InterfaceImpl<Integer>(); i2.show(100); Inter<Boolean> i3=new
InterfaceImpl<Boolean>(); i3.show(true); } }
4.泛型的好处
Java
语言中引入泛型是一个较大的功能增强。不仅语言、类型系统和编译器有了较大的变化,以支持泛型,而且类库也进行了大翻修,所以许多重要的类,比如集合框架,都已经成为泛型化的了。
1,类型安全。 泛型的主要目标是提高 Java
程序的类型安全。通过知道使用泛型定义的变量的类型限制,编译器可以在一个高得多的程度上验证类型假设。没有泛型,这些假设就只存在于程序员的头脑中(或者如果幸运的话,还存在于代码注释中)。
5. 泛型通配符

* 泛型通配符<?>
任意类型,如果没有明确,那么就是Object以及任意的Java类 //泛型如果明确写的时候,前后需要一致 Collection<Object>
c1=new ArrayList<Object>(); //Collection<Object> c2=new ArrayList<Animal>();
//Collection<Object> c3=new ArrayList<cat>();报错 //Collection<Object> c4=new
ArrayList<dog>(); //?表示任意类型都是可以的 Collection<?> c2=new ArrayList<Animal>();
Collection<?> c3=new ArrayList<cat>(); Collection<?> c4=new ArrayList<dog>();
* ? Extends E
向下设定,E及其子类 //? Extends E Collection<? extends Animal> c5=new
ArrayList<Animal>(); Collection<? extends Animal> c6=new ArrayList<dog>();
Collection<? extends Animal> c7=new ArrayList<cat>();
* ? super E
向上设定,E及其父类 //向上设定,E及其父类 Collection<? super Animal> c8=new
ArrayList<Object>(); Collection<? super Animal> c9=new ArrayList<Animal>();

技术
今日推荐
下载桌面版
GitHub
百度网盘(提取码:draw)
Gitee
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:766591547
关注微信