标签:初始 TE lang div this 使用场景 show void new
类型的参数化机制,将类型当成参数通过<>传给对应的类/接口/方法。
package testSwitch; //<T>就是定义的泛型 class Generics <T>{ T data; public T getData() { return data; } public void setData(T data) { this.data = data; } } public class TestGenerics { public static void main(String[] args) { //初始化时通过<Integer>的指定类型为Integer Generics<Integer> genericsObject = new Generics<Integer>(); genericsObject.setData(10); Integer i = genericsObject.getData(); System.out.println(i); } }
类型擦除:在编译的时候是将所有的泛型类型T看成Object类型,然后根据T进行安全的强制转换。
这一点我们可以通过反编译清楚的看出来
class Generics { Generics() { } //这里把所有的T都看成了Object类型 public Object getData() { return data; } public void setData(Object data) { this.data = data; } Object data; } public class TestGenerics { public TestGenerics() { } public static void main(String args[]) { Generics genericsObject = new Generics(); genericsObject.setData(Integer.valueOf(10)); //这里增加的强制类型转换 Integer i = (Integer)genericsObject.getData(); System.out.println(i); } }
//声明 public <T> void showData(T t) { System.out.println(t + " and data " + data);; } //调用,直接赋值就可以了 genericsObject.showData(20)
class Generics { int data; //限定为Number的子类 public <T extends Number> void showData(T t) { System.out.println(t + " and data " + data);; } } public class TestGenerics { public static void main(String[] args) { Generics genericsObject = new Generics(); genericsObject.showData(12.2); } }
package testGenerics; //定义原始无限定泛型 class Generics <T>{ T data; public Generics(T data) { this.data = data; } public void showData() { System.out.println(data); } } class GenericsHelper{ //在其他类中使用的时候限定泛型类型 public static void showNewData(Generics<? extends Number> gen) { gen.showData(); } } public class TestGenerics { public static void main(String[] args) { GenericsHelper.showNewData(new Generics<Integer>(10)); } }
Class<?> classType = Class.forName(Java.lang.String);
标签:初始 TE lang div this 使用场景 show void new
原文地址:https://www.cnblogs.com/darrenqiao/p/9219104.html