Java泛型
格式:
访问权限 class 类名称<泛型,泛型......>{
属性
方法
}
对象的创建:
类名称<具体类型> 对象名称 = new 类名称<具体类型>();
示例:
package com.jike.fanxing; class Point<T>{ private T x; private T y; public T getX() { return x; } public void setX(T x) { this.x = x; } public T getY() { return y; } public void setY(T y) { this.y = y; } } public class test02 { public static void main(String[] args) { Point<Integer> p=new Point<Integer>(); p.setX(100); p.setY(50); System.out.println("经度:"+p.getX()+"\t纬度:"+p.getY()); } }
输出:
经度:100 纬度:50
构造方法中使用泛型:
package com.jike.fanxing; class Fanxing<T>{ private T value; public Fanxing(T value) { //构造方法 this.value=value; } public void setValue(T value) { this.value = value; } public T getValue() { return value; } } public class test01 { public static void main(String[] args) { Fanxing<String> f=new Fanxing<String>("构造方法中使用泛型"); System.out.println(f.getValue()); } }
输出:
构造方法中使用泛型
通配符:用?代表所有类型。
package com.jike.fanxing; class info<T>{ private T key; public void setKey(T key) { this.key = key; } public T getKey() { return key; } @Override public String toString() { //重写了toString方法 return this.getKey().toString(); } } public class test03 { public static void main(String[] args) { info<String> i=new info<String>(); i.setKey("极客学院"); tell(i); } public static void tell(info<?> i) { System.out.println(i); //因为toString方法已经重写了,所以输出i就会调用toString方法 } }
输出:
极客学院
泛型在接口中的使用:
package com.jike.fanxing; interface GetInter<T>{ public void say(); } class Gin implements GetInter<String>{ private String info; public Gin(String info){ this.info=info; } public String getInfo() { return info; } public void setInfo(String info) { this.info = info; } @Override public void say() { // TODO Auto-generated method stub } } public class test04 { public static void main(String[] args) { Gin g =new Gin("jikexueyuan"); System.out.println(g.getInfo()); } }
输出:
jikexueyuan
或者:定义子类时不指明泛型的具体类型,而是在实例化时知名类型。
package com.jike.fanxing; interface GetInter<T>{ public void say(); } class Gin<T> implements GetInter<T>{ private String info; public Gin(String info){ this.info=info; } public String getInfo() { return info; } public void setInfo(String info) { this.info = info; } @Override public void say() { // TODO Auto-generated method stub } } public class test04 { public static void main(String[] args) { Gin<String> g =new Gin<String>("jikexueyuan"); System.out.println(g.getInfo()); } }
泛型方法:可以定义泛型参数。
package com.jike.classDemo; class Gener{ public<T>T tell(T t){ return t; } } public class test04 { public static void main(String[] args) { // TODO Auto-generated method stub Gener g=new Gener(); String str=g.tell("jikexueyuan"); System.out.println(str); int i=g.tell(100); System.out.println(i); } }
输出:
jikexueyuan 100
泛型数组:泛型方法的参数时数组
package com.jike.classDemo; public class test05 { public static void main(String[] args) { Integer arr[]= {1,2,3}; tell(arr); } public static <T>void tell(T arr[]){ for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } } }
输出:
1 2 3