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()+"	纬度:"+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
原文地址:https://www.cnblogs.com/zhhy236400/p/10447326.html