/**
* 书本:《Thinking In Java》
* 功能:捕获转换
* 文件:CaptureConversion.java
* 时间:2015年5月19日07:52:43
* 作者:cutter_point
*/
package Lesson15_generices;
public class CaptureConversion
{
static <T> void f1(Holder<T> holder)
{
System.out.println("This is f1()");
T t = holder.get(); //这个就是得到holder的值,也就是T类型的值
System.out.println(t.getClass().getSimpleName()); //得到类型名
}
static void f2(Holder<?> holder) //由于f1需要一个确切的参数,但是f2的参数看起来不是确切的,但是f2调用了f1,所以参数类型在f2调用f1的时候被捕获了
{
System.out.println("这里是f2");
f1(holder); //调用f1
}
public static void main(String[] args)
{
Holder raw = new Holder<Integer>(1); //传入的类型是Integer
f1(raw); //有警告 ,直接调用的f1,返回Integer
f2(raw); //这个没有警告,返回同上
Holder rawBasic = new Holder();
rawBasic.set(new Object()); //警告
f1(rawBasic);
f2(rawBasic);
Holder<?> wc = new Holder<Double>(1.0);
f2(wc);
}
}
输出:
This is f1()
Integer
这里是f2
This is f1()
Integer
This is f1()
Object
这里是f2
This is f1()
Object
这里是f2
This is f1()
Double