欢迎来到星辰寺小和尚的博客

生为冰山,就该淡淡地爱海流、爱风,并且在偶然接触时,全心全意地爱另一块冰山。
扩大
缩小

Java中的泛型

  泛型的本质是将类型参数化,即将所操作的数据类型编程一个参数。

  特性:Java中的泛型只在编译阶段有效。在编译过程中,正确检验泛型结果后,会将泛型相关信息擦除,不会进入运行阶段。在逻辑上是多个不同的类型,实际上都是相同的类型。

class GeneralType <Type>{
	Type object;
	public GeneralType(Type object){
		this.object = object;
	}
	public Type getObj(){
		return object;
	}
}

public class Test{
	public static void main(String[] args){
		GeneralType<Integer> i =
			new GeneralType<Integer>(2);
		GeneralType<Double> d = 
			new GeneralType<Double>(0.33);
	System.out.println("i.object = " + (Integer)i.getObj());
	System.out.println("i.object=" + (Integer)d.getObj()); //编译错误
	}
}

 

1.泛型方法

class GeneralMethod{
	<Type>void printClassName(Type object){
		System.out.println("object.getClass().getName()");
	}
}

public class Test{
	public static void main(String[] args){
		GeneralMethod gm = new GeneralMethod();
		gm.printClassName("Hello");
		gm.printClassName(3);
		gm.printClassName(3.0f);
		gm.printClassName(3.0);
	}
}

//使用?作为 通配符
class GeneralType <Type>{
	Type object;
	public GeneralType(Type object){
		this.object = object;
	}
	public Type getObj(){
		return object;
	}
}
class ShowType{
	public void show(GeneralType<?> o){
		System.out.println(o.getObj().getClass().getName());
	}
}


public class Test{
	public static void main(String[] args){
		ShowType st = new ShowType();
		GeneralType<Integer> i = new GeneralType<Integer>(2);
		GeneralType<String> s = new GeneralType<String>("Hello");
		st.show(i);
		st.show(s);
	}
}

//运行结果
java.lang.Integer
java.lang.String 

 有限制的泛型

  在参数Type后面使用extends关键字并加上类名或者接口名,表明参数所代表的类型必须是该类的子类或者实现了该接口。对于实现了某接口的有限制泛型,也是使用extends关键字,而不是implements关键字。

class GeneralType <Type extends Number>{
	Type object;
	public GeneralType(Type object){
		this.object = object;
	}
	public Type getObj(){
		return object;
	}
}
class ShowType{
	public void show(GeneralType<?> o){
		System.out.println(o.getObj().getClass().getName());
	}
}


public class Test{
	public static void main(String[] args){
		ShowType st = new ShowType();
		GeneralType<Integer> i = new GeneralType<Integer>(2);
		GeneralType<String> s = new GeneralType<String>("Hello");//非法,T只能是Number或Number的子类
		st.show(i);
		st.show(s);
	}
}

  

posted on 2020-02-06 20:40  星辰寺的小和尚  阅读(256)  评论(0)    收藏  举报

导航