/** * 书本:《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
时间: 2024-11-08 13:31:52