java泛型机制的优点有,java的泛型是如何工作的

  java泛型机制的优点有,java的泛型是如何工作的

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

  面试官:跟我说说java的通用机制。

  (学习视频分享:java视频教程)

  简化回答

  在Java的开发中,一个类、接口或方法通过使用菱形语法有一组泛型类作为参数。泛型类最终由尖括号中的规则定义。泛型类通常用大写字母表示,通常是字母T,后来用Java编译器编译。泛型将被删除。根据使用的具体类,会替换泛型,生成类字节码,所以泛型对Jvm是透明的。

  豪华回答

  JDK1.5中正式引入了泛型。

  Java中的通用背景介绍

  允许将Java集合分成许多类型,例如

  list list=new ArrayList();

  list . add( String );

  list . add(1024);在JDK1.5之前,这是一种常见的用法,即使在今天的JDK下,这也是允许的。那么,类似这种集合的用法会带来一些问题,就是集合中放了哪些类型?恐怕只有创作收藏的人知道,其他打电话的人根本无法确定。所以,在大型项目中,很容易出现问题。一旦调用方强制传输集合中的对象,将会报告错误。

  通用类型

  引入泛型后,可以在编译阶段检查类型是否符合要求,很大程度上杜绝了盲目的类型转换。

  泛型主要在编译器中工作。编译后,JVM运行时,无法感知泛型。

  仿制药分为普通仿制药和通用仿制药。

  1.通用仿制药

  顾名思义,这类泛型在调用时支持任意类型,但调用时等号左右两边的泛型必须一致。JDK1.7右边的菱形可以省略。

  Classt {.}//声明时

  TestInteger test=new TestInteger();//被调用时

  Test integer Test=new Test();//调用3时1.7。有界泛型

  ?//无界泛型,任何类型匹配

  extends class//有界泛型-从父类继承

  extends interface b//有界泛型——实现一个接口

  t扩展了a类接口b接口c.//有界泛型-多重边界

  t class c//bounded generics-指定类的父类generic erasure。

  只是现在泛型只在写代码和编译的时候起作用,而Jvm在加载类运行时是透明的,因为编译器在编译的时候会擦除泛型。简单而松散地说,就是:把类或方法上的尖括号干掉,按照尖括号里的规则用特定的类替换,这样Jvm运行时就不知道这段代码里以前有过泛型。这样做是为了兼容性。如前所述,在JDK1.5中引入了泛型,这样,即使引入了泛型,现有的Jvm也不需要大的改动,只需要改动编译器。对于编译器能感知,虚拟机不能感知的语法,人们把这种语法称为suger,编译器拿到干货交给虚拟机执行。

  (图文教程推荐:java入门教程)

  通用擦除机制

  //对的泛型

  公共类对{

  private T mFirst

  private T mSecond

  public T getmFirst() {

  返回mFirst

  }

  public void setmFirst(T mFirst) {

  this . m first=m first;

  }

  public T getmSecond() {

  返回mSecond

  }

  public void setms second(T ms second){

  this . ms second=ms second;

  }

  }

  //对的原始类型

  //每当定义泛型类型时,都会自动提供相应的原始类型。

  公共类对{

  私有对象mFirst

  私有对象mSecond

  公共对象getFirst() {

  返回mFirst

  }

  public void set first(Object m first){

  this . m first=m first;

  }

  公共对象getSecond() {

  返回mSecond

  }

  public void setm second(Object ms second){

  this . ms second=ms second;

  }

  }

  //如果调用PairExtensions字符串进行编译和擦除,会得到以下=

  类别对{

  私有字符串mFirst

  私有字符串mSecond

  .

  }当泛型作为方法的入参时,擦除后换成通配泛型的下界,例如增加方法

  公共静态void insertElements(List?超级A榜){

  //添加进来的都是层级"小于等于"答的,也就是下界

  列表。add(new A());

  列表。add(new B());

  list.add(新c());

  }当泛型作为方法的回参时,擦除后换成通配泛型的上界,例如得到方法

  公共void processElements(列表?扩展一个元素){

  //对于循环挨个获取列表里的数据,都当做一,也就是都当做上界

  对于(答一答:元素){

  系统。出去。println(a . getvalue());

  }

  }对于泛型的类型擦除说再多,看再多博客,不如官方定义准确,放一段神谕官方对于类型擦除的文档

  类型擦除

  爪哇语言中引入了泛型,以在编译时提供更严格的类型检查,并支持泛型编程。为了实现泛型,Java编译器将类型擦除应用于:

  如果类型参数是无界的,则用它们的界限或对象替换泛型类型中的所有类型参数。因此,产生的字节码只包含普通的类、接口和方法。如有必要,插入类型转换以保持类型安全。生成桥接方法以保留扩展泛型类型中的多态性。类型擦除确保不会为参数化类型创建新的类;因此,泛型不会产生运行时开销。更多面试题请点击:java面试题及答案以上就是说说爪哇岛的泛型机制是怎样的的详细内容,更多请关注我们其它相关文章!

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

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