Java面向对象:泛型

泛型类示例

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 test3 {

	public static void main(String[] args) {
	//T可以使int等类型
	Point<String> p = new Point<String>();
	p.setX("X坐标:100");
	p.setY("y坐标:200");
	System.out.println(p.getX() +"   " + p.getY());
		
	}
	
}

构造方法中使用泛型类

构造方法能为类中的属性初始化(从构造方法传入属性值),那么如果类中的属性通过泛型指定,而又需要通过构造方法设置属性内容的时候,那么构造方法的定义与之前并无不同,不需要想声明类那样指定泛型。

package fanxingDemo;

class Con1<T>{
	private T value;
	//构造方法传入value值
	public Con1(T value){
		this.value = value;
	}

	public T getValue() {
		return value;
	}

	public void setValue(T value) {
		this.value = value;
	}
	
}


public class GenerateDemo02 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Con1<String> cString = new Con1<String>("构造方法中使用泛型");
		
		System.out.println("hello" + cString.getValue());
	}

}

指定多个泛型类

设置多个泛型直接在<>中添加多个泛型就可以了

package fanxingDemo;
//指定多个泛型,并且从泛型的构造方法传递属性值
class Gen<T,K>{
	private T name;
	private K age;
	public Gen(T name,K age){
		this.name = name;
		this.age = age;
	}
	public T getName() {
		return name;
	}
	public void setName(T name) {
		this.name = name;
	}
	public K getAge() {
		return age;
	}
	public void setAge(K age) {
		this.age = age;
	}
	
}


public class GenerateDemo02 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Gen<String,Integer> g = new Gen<String,Integer>("张三",25);
		System.out.println(g.getName() + g.getAge());
	}
	
	
}

通配符的使用

当函数传入泛型类型不确定是,使用?代替类型,不论什么类型都能执行。

package fanxingDemo;

class Infor<T>{
	private T key;
	public Infor(T value){
		this.key = value;
		
	}
	public T getKey() {
		return key;
	}
	public void setKey(T key) {
		this.key = key;
	}
}

public class GenerateDemo02 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Infor<String> sInfor = new Infor<String>("String");
		call(sInfor);
		System.out.println();
	}
	//传入Infor泛型时不确定使用的类型,此时可以使用?来代替
	public static void call(Infor<?> i) {
		System.out.println(i.getKey());
	}
}

泛型接口

之前讲的都是泛型类,现在介绍泛型接口

package fanxingDemo;

//泛型+抽象接口
interface GenInter<T>{
	public static final Object NAME = "极客学院";
	public abstract void tell();	
}
	
class Gen<T> implements GenInter<T>{

	private T info;
	public Gen(T infor){
		this.info = infor;
	}
	
	public T getInfo() {
		return info;
	}

	public void setInfo(T info) {
		this.info = info;
	}

	@Override
	public void tell() {
		// TODO Auto-generated method stub
		
	}
	
}

public class GenerateDemo02 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
	Gen<String> g = new Gen<String>("你好!");
	System.out.println(g.getInfo() + GenInter.NAME);	
	}
}

泛型方法

泛型方法中可以定义泛型参数,此时,参数的类型就是传入的数据类型。

public class GenerateDemo02 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
	System.out.println(call("极客学院"));
			
	}
	//泛型方法,注意<T>T这种格式第一个<T>指定那个字母是泛型,第二个T指返回类型。
	public static <T>T call(T value){
		return value;
	}
}

泛型数组

使用泛型方法的时候,也可以传递或返回一个泛型数组。

public class GenerateDemo02 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String[] str = {"第一个","第二个","第三个"};
		System.out.println(call(str));	
		Integer[] i = {1,2,3,4,5};
		System.out.println(call(i));
	}
	//泛型数组,返回string类型
	public static <T>String call(T arr[]){
		for(int i = 0; i < arr.length; i++)
			System.out.println(arr[i]);
		return "成功返回!";
	}
}


你可能感兴趣的:(Java面向对象:泛型)