<pre name="code" class="java">public interface GenericsTest<T> { public T show(); } class Color1{ public void play(){ System.out.println("我是红色!"); } } class Color2{ public void play(){ System.out.println("我是绿色!"); } }
3.2泛型类
public class GenericsTest<T> { private T color; public static void main(String[] args) { GenericsTest<Color1> generics1=new GenericsTest<Color1>(); generics1.color.play();//输出:我是红色! GenericsTest<Color1> generics2=new GenericsTest<Color1>(); generics2.color.play();//输出:我是绿色! } } class Color1{ public void play(){ System.out.println("我是红色!"); } } class Color2{ public void play(){ System.out.println("我是绿色!"); } }
import java.util.ArrayList; import java.util.List; public class GenericsTest{ public static void main(String[] args) { List<Integer> list=new ArrayList<Integer>(); List<String> li=new ArrayList<String>(); System.out.println(list.getClass());//输出class java.util.ArrayList System.out.println(list.getClass()==li.getClass());//输出true,说明它们是同一个类 } }
3.3泛型方法
public class GenericsTest{ public static <T> void play(T x){ System.out.println(x); } public static void main(String[] args) { Integer i=2014; String str="lavor_zl"; play(i);//输出结果:2014 play(str);//输出结果:lavor_zl } }
import java.util.ArrayList; import java.util.List; public class GenericsTest{ public static void main(String[] args) { List<Integer> list=new ArrayList<Integer>(); list.add(2014); List li=list;//这就是擦除 } }
import java.util.ArrayList; import java.util.List; public class GenericsTest{ public static void main(String[] args) { List<Integer> list=new ArrayList<Integer>(); list.add(2014); List li=list; List<String> l=li; li.get(0);//原来存放的数据取出来时被强制转换成String类型 } }
PS:List<String> list=new ArrayList<String>(),右边"<>"里面的类型必须和左边一致且不可以省略。
Java1.7以后右边"<>"里面的类型可以省略,这就是Java1.7泛型的"菱形"语法。
原文:http://blog.csdn.net/lavor_zl/article/details/41356187