深入理解java泛型详解,对java泛型的理解

  深入理解java泛型详解,对java泛型的理解

  本文给大家带来了一些java的知识,主要介绍了一些关于泛型的相关问题,包括自定义泛型类、自定义泛型方法、自定义泛型接口等。来看看吧,希望对你有帮助。

  如何解决写爬虫IP受阻的问题?立即使用。

  泛型:是JDK5中引入的一个特性,可以在编译时约束和检查操作的数据类型。泛型的格式:数据类型,注意:泛型只能支持引用数据类型。系统的所有接口和实现类都支持使用泛型。优势:

  统一数据类型。将运行问题提前到编译时,避免了强制类型转换的可能问题,因为类型可以在编译时确定。公共静态void main(String[] args) {

  ListString list=new ArrayList();

  List.add(石原聪美);

  List.add(工藤静香);

  List.add(朱茵);

  for (String s : list) {

  system . out . println(s);

  }

  }

  输出结果:

  石原聪美

  工藤静香

  而且朱茵泛型可以在很多地方定义,比如类后的泛型类,方法声明上的泛型方法,接口后的泛型接口。让我们了解一下这些泛型是如何一起使用的:

  

自定义泛型类

  

概念

  同时定义泛型的类是泛型类。泛型类的格式:修饰符类名泛型变量{}公共类MyArrayListE { }函数:可以在编译阶段指定数据类型,类似于集合的函数

实战教学

  现在创建一个泛型类实现基本的添加和删除操作,以便具体了解其用法:

  //泛型类MyArrayLIst

  公共类MyArrayLIstE {

  public void add(E e){

  }

  public void remove(E e)

  }

  }

  //main

  公共静态void main(String[] args) {

  MyArrayLIst string list=new MyArrayLIst();

  //通过设置泛型,可以独占处理数据。

  List.add(石原聪美);

  List.add(工藤静香);

  list . remove( Shizuka Kudo );

  }泛型类的原理:

  用传输的实数据类型替换所有出现的泛型变量。

  通过仔细观察,其实不难发现,泛型类与普通类最大的区别在于,在调用方法时可以统一处理相同的数据,不会涉及其他数据类型,从而在一定程度上避免了强制类型转换中可能出现的问题。

  

自定义泛型方法

  

概念

  如果同时定义了一个泛型方法,则定义了一个泛型方法。泛型方法的格式:修饰符泛型变量返回值类型方法名(参数列表){}public E void view(E e){}函数:方法中可以使用泛型来接收实际类型的所有参数,使得方法的通用性更强。注意:泛型方法需要与泛型类中定义的方法不同。虽然他们也在使用泛型,但是泛型不是由他们定义的,而是由泛型类定义的。

实战教学

  无论传入什么类型的数组,都可以返回其内容,即实现Arrays.toString()的功能

  公共静态void main(String[] args) {

  String [] name={ 石原聪美,工藤静香,朱茵 };

  视图(名称);

  Integer [] age={18,19,20 };

  观点(年龄);

  }

  公共静态T void视图(T[] arr){

  StringBuilder list=new StringBuilder();

  for(int I=0;长度;i ) {

  list.append(arr[i])。追加( \ t );

  }

  system . out . println(list);

  }通过定义泛型方法,可以接收多种数据类型,应用范围更广。

  

自定义泛型接口

  

概念

  由泛型定义的接口是泛型接口。泛型接口的格式:public interface Peoplee { } public interface Peoplee { }函数:泛型接口允许实现类为当前函数选择需要操作的数据类型

实战教学

  定义一个people接口实现教师类和学生类的操作。

  //人员界面

  公共接口人员E{

  无效运行;

  空隙高度(E E);

  }

  //学生类

  公共课教师{

  }

  //实现类Fantype

  公共类Fantype实现PeopleTeacher {

  @覆盖

  公共void run(教师教师){

  }

  @覆盖

  公共空高(教师教师){

  }

  }通过观察上面的代码可以发现,人之后定义了什么类型,那么实现类只能对这个数据类型进行操作,其他类型不能。

  

通配符和上下限

  

通配符

  ?可以在“使用泛型”的时候代表一切类型E T K V是在定义泛型的时候用的 假设有一个学生和老师的竞赛。要比较谁快,创建一定数量的对象,传入集合。但是,当我们将这两个集合分别传入方法时,会发现学生对象集合list2中有一个错误。为什么?原因是数据类型不同,那么两种类型怎么传入呢?也许有人会说,“既然两个类都是人的子类,为什么不把它的泛型定义为人呢?”这个想法很好,但是我们需要明确一点,子类虽然和父类相关,但是定义之后的集合是不相关的,所以在这里行不通。

  //main

  //教师对象集合

  ArrayList teacher list 1=new ArrayList();

  list1.add(新老师());

  list1.add(新老师());

  PK(list 1);

  //学生对象的集合

  ArrayList student list 2=new ArrayList();

  list2.add(新生());

  list2.add(新生());

  PK(list 2);//因为pk方法的参数是名为Teacher的泛型集合,所以会报错。

  //父类

  阶级人民{

  }

  //子类

  班主任延人{

  }

  班级学生扩展人{

  }

  //pk方法:

  公共静态void PK(ArrayList teacher people){

  }要解决这个问题,可以把本文介绍的知识“通配符”放到实际应用中去解决问题。通过它的简短概念”?“使用泛型”时可以表示所有类型。为了理解它的功能,这里我们可以使用“?”一起代表两种类型。

  公共静态void pk(ArrayList?人){

  //通过通配符?这个问题是可以解决的。

  }

上下限

  然而就在这个时候,另一个问题出现了。定义了一个dog类,试图创建一些对象,并将它们传递到集合中,以混合到竞争中。当然,这种情况是不允许发生的。然而呢?它可以代表任何类型,而且不能被限制。因此,上限和下限的作用就体现出来了:

  上限:扩展父类,传入类型必须是父类或父类子类的下限:超子类,传入类型必须是子类或者子类的父类,public static void pk(ArrayList?扩展人员人员){

  //这个问题可以通过上下限来解决。

  //要求传入的类型必须是People的子类。

  }推荐学习:《java视频教程》以上是一起了解Java中泛型的详细内容。更多请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: