博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java泛型
阅读量:5214 次
发布时间:2019-06-14

本文共 1396 字,大约阅读时间需要 4 分钟。

泛型入门

我们在学习集合的时候,会看到如下图的警告:

 

 集合有一个特点——当你把对象丢进集合中,集合就会“忘记”这个对象的类型,而把它当做Object类型来处理。这样当程序员不小心将不同类型的数据丢进同一个集合中时就会出现错误。

从Java5以后,Java引入了“参数化类型”的概念,允许程序在创建集合时指定集合的类型,这就是我们今天要讲的泛型。

 

我们将上面的代码稍微做一下修改,如下图所示:

 

 我们发现上面的警告没有了,这时候list集合中只能存放String类型的变量,如果存放其他类型的变量,编辑器则会报错。

 

泛型的定义格式如下:

List
<类型>
list=new ArrayList
<类型>
();//后面的类型可以省略,直接写<>即可 List
<类型>
list=new ArrayList<>();//简写形式

 

 

深入泛型:

所谓泛型,就是允许在定义类、接口、方法时使用类型形参,这个类型形参(或叫泛型)将在声明变量、创建对象、调用方法时动态地指定(即传入实际的类型参数,也可称为类型实参)。Java5改写了集合框架中的全部接口和类,为这些接口、类增加了泛型支持,从而可以在声明集合变量、创建集合对象时传入类型实参,这就是在前面程序中看到的 List<String>和 ArrayList<String>两种类型。

 

定义泛型接口、类:

//定义泛型接口,一个形参public interface List
{}//定义泛型接口,两个形参public interface Map
{} //定义泛型类 public class Apple
{
  private T info;      public Apple(T info){
    this.info=info;   }      public Apple(){}//注意,这里定义构造方法时不能使用public Apple
(){} }

  

从泛型类派生子类:

public class A extends Apple

  

泛型类在派生子类时不能使用extends Apple<E>,而要传入具体的类型。就好比你在定义方法时用的是形参,但是调用方法时需要传入实际参数。

 

并不存在泛型类:

我们定义泛型类时会看到这样的定义:

List
l1=new ArrayList
()List
l2=new ArrayList
()

  

ArrayList<String>确实也像一种特殊的ArrayList类,但其实不是,系统并没有为ArrayList<String>生成具体的类,而且也不会把它当做新类来处理。

 

 

泛型方法:

泛型方法的定义:

 

 泛型方法的调用:

 

转载于:https://www.cnblogs.com/wgblog-code/p/11451685.html

你可能感兴趣的文章
实验2-2
查看>>
C#初识
查看>>
String,StringBuffer与StringBuilder的区别?? .
查看>>
JavaScript(三) 数据类型
查看>>
移动端rem布局屏幕适配插件(放js中便可使用)
查看>>
Docker
查看>>
bzoj2259 [Oibh]新型计算机
查看>>
对位与字节的深度认识
查看>>
C++编程基础二 16-习题4
查看>>
MongoDB遇到的疑似数据丢失的问题。不要用InsertMany!
查看>>
服务器被疑似挖矿程序植入107.174.47.156,发现以及解决过程(建议所有使用sonatype/nexus3镜像的用户清查一下)...
查看>>
类型“XXX”的控件“XXXX”必须放在具有 runat=server 的窗体标记内。
查看>>
JQuery 学习
查看>>
session token两种登陆方式
查看>>
C# ArrayList
查看>>
IntelliJ IDEA 12集成Tomcat 运行Web项目
查看>>
java,多线程实现
查看>>
个人作业4-alpha阶段个人总结
查看>>
android smack MultiUserChat.getHostedRooms( NullPointerException)
查看>>
递归-下楼梯
查看>>