java泛型编程 pdf

编程入门 行业动态 更新时间:2024-10-20 20:44:01

<a href=https://www.elefans.com/category/jswz/34/1770091.html style=java泛型编程 pdf"/>

java泛型编程 pdf

先发布,以后有空再修改。。。

第一次看到《java核心技术卷一》中关于泛型这部分的时候感觉很复杂,似乎有说不完的约束条件,让人难以理解。当时只是囫囵吞枣般过了一遍,也没有看出个什么来。现在是时候回过头来认真学习学习这方面的知识啦。在这里记录一下JAVA泛型中比较难理解的部分。

泛型表达式的类型擦除

按照书中的例子:

class Pair{

public Pair(){

first=null;

second=null;

}

public Pair(T _first,T _second){

first=_first;

second=_second;

}

public void setFirst(T _first){

first=_first;

}

public void setSecond(T _second){

second=_second;

}

public T getFirst(){

return first;

}

public T getSecond(){

return second;

}

public String toString(){

return "First:" +first + "\tSecond:"+second;

}

private T first;

private T second;

}

书中提到:虚拟机中是没有泛型类型对象——所有对象都属于普通类。也就是说经过编译之后的字节码文件中是没有“泛型”这个概念的。

因为T是一个无限定的变量,所以上面的代码中的类型T,可以直接用Object来代替,Object是所有类的超类。无论是Pair或者Pair,编译后,它们都将变成Pair

如果类型限定是多个接是多个接口,如果下面的例子:

public class Interval{

public Interval(T first,T second){

if(firstpareTo(second)<=0){lower=first;upper=second;}

else {lower=second;upper=first;}

}

...

private T lower;

private T upper;

}

那么编译器在编译的时候,是按接口出现的顺序来进行替换的。如上面,类型T将会被用Comparable来替换。如果要用到类型的Serializable接口的时候,编译会在对应的地方加入强制转换语句。同样,如果限定为: T extends Serializable & Comparable的话,类型T将会被用Serializable来替换。因此,作者说了,为了提高效率,应该将标签接口(没有方法的接口,比如Cloneable)放在边界列表的末尾。

作者还提到编译在处理(翻译)泛型表达式的时候的一些细节问题:

当程序调用泛型方法时,如果擦除返回类型,编译器插入强制类型转换。例如:

Pair buddies=...;

Employee buddy=buddies.getFirst();

擦除类型之后将返回Object类型(假设类型T是没有限定的),编译器自动插入Employee的强制类型转换,也就是说,编译器把这个方法的调用翻译成了两条虚拟机指令:

Employee buddy=(Employee)buddies.getFirst();

1。对原始方法(也就是擦除之后的)Pair.getFirst()的调用,这个方法返回一个Object对象。

2。将返回的Object类型的对象强制转换为Employee。

通配符:

直观地讲,带有超类型限定的通配符声明的对象,可以对其进行写入操作。

而带有子类型限定的通配符声明的对象,可以对其进行读取操作。

更多推荐

java泛型编程 pdf

本文发布于:2024-03-06 14:15:30,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1715517.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:java   pdf

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!