欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java中generic实例详解

程序员文章站 2023-12-14 23:19:22
一介绍: 在javase1.5之前,没有泛型的情况的下,通过对类型object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求...

一介绍:

在javase1.5之前,没有泛型的情况的下,通过对类型object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是一个安全隐患。

泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。

二、泛型参数:

class gen<t> {
	private t ob;
	//定义泛型成员变量
	public gen(t ob) {
		this.ob = ob;
	}
	public t getob() {
		return ob;
	}
	public void setob(t ob) {
		this.ob = ob;
	}
	public void showtype() {
		system.out.println("t的实际类型是: " + ob.getclass().getname());
	}
}
public class genericparameter {
	public static void main(string[] args){
		//定义泛型类gen的一个integer版本
		gen<integer> intob=new gen<integer>(100);
		intob.showtype();
		int i= intob.getob();
		system.out.println("value= " + i);
		system.out.println("----------------------------------");
		//定义泛型类gen的一个string版本
		gen<string> strob=new gen<string>("hello dylan!");
		strob.showtype();
		string s=strob.getob();
		system.out.println("value= " + s);
	}
}

output:

t的实际类型是: java.lang.integer
value= 100
----------------------------------
t的实际类型是: java.lang.string
value= hello dylan!

三、泛型类:

class genericsfoo<t> {
	private t x;
	public genericsfoo(t x) {
		this.x = x;
	}
	public t getx() {
		return x;
	}
	public void setx(t x) {
		this.x = x;
	}
}
public class genericclass {
	public static void main(string args[]){
		genericsfoo<string> strfoo=new genericsfoo<string>("hello generics!");
		genericsfoo<double> doufoo=new genericsfoo<double>(new double("33"));
		genericsfoo<object> objfoo=new genericsfoo<object>(new object());
		system.out.println("strfoo.getx="+strfoo.getx());
		system.out.println("doufoo.getx="+doufoo.getx());
		system.out.println("objfoo.getx="+objfoo.getx());
	}
}

output:

strfoo.getx=hello generics!
doufoo.getx=33.0
objfoo.getx=java.lang.object@1d0fafc

四 限制泛型:

import java.util.arraylist;
import java.util.collection;
class collectiongenfoo<t extends collection> {
	private t x;
	public collectiongenfoo(t x) {
		this.x = x;
	}
	public t getx() {
		return x;
	}
	public void setx(t x) {
		this.x = x;
	}
}
public class genericrestrict {
	public static void main(string[] args) {
		collectiongenfoo<arraylist> listfoo = null;
		listfoo = new collectiongenfoo<arraylist>(new arraylist());
		collectiongenfoo<? extends collection> listfoo1 = null;
		listfoo1=new collectiongenfoo<arraylist>(new arraylist());
		system.out.println("实例化成功!");
	}
}

output:
实例化成功!

五 泛型方法:

public class genericfunction {
	public <t> void f(t x) {
		system.out.println(x.getclass().getname());
	}
	public static void main(string[] args) {
		genericfunction ea = new genericfunction();
		ea.f(" ");
		ea.f(10);
		ea.f('a');
		ea.f(ea);
	}
}

output:
java.lang.string
java.lang.integer
java.lang.character
genericfunction

-----------------------------
dylan presents.

总结

以上就是本文关于java中generic实例详解的全部内容,希望对大家有所帮助。如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

上一篇:

下一篇: