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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。