day13泛型

 泛型是一个重要的JAVA语言加强,它使语言更加灵活.1.类型安全 泛型的主要目标是提高Java 程序的类型安全。通过知道使用泛型定义的变量的类型限制,编译器可以在一个高得多的程度上验证类型假设。没有泛型,这些假设就只存在于程序员的头脑中。2.消除强制类型转换 泛型的一个附带好处是,消除源代码中的许多强制类型转换。这使得代码更加可读,并且减少了出错机会。3.潜在的性能收益 泛型为较大的优化带来可能。在泛型的初始实现中,编译器将强制类型转换(没有泛型的话,程序员会指定这些强制类型转换)插入生成的字节码中。但是更多类型 信息可用于编译器这一事实,为未来版本的JVM 的优化带来可能.

package a;
class Person
{}
//泛型,类似C++模板,一个字母代表一种类型
//泛型就两种情况1在创建对象的时候把泛型确定下来,2在继承的时候把类型确定下来
interface  ICrudPerson<T,Y>  //CRUD即增(create)删(delete)改(update)查(Retrieve)
{
	T addPerson(Y p);
	T modifyPerson(Y p);
	T deletePersonById(Y p);
	T findPersonById(Y p);
}

class StudentCrudImpl implements ICrudPerson<String,Person>//接口实现类命名规范:名字后面加Impl  //在继承中确定泛型的类型
{

	public String addPerson(Person p) {
		return null;
	}

	public String modifyPerson(Person p) {
		return null;
	}

	public String deletePersonById(Person p) {
		return null;
	}

	public String findPersonById(Person p) {
		return null;
	}
	
}
class StudentCrudImpl2<V> implements ICrudPerson<Person,String>
{
	V a;
	void method(V...a){}

	public Person addPerson(String p) {
		return null;
	}

	public Person modifyPerson(String p) {
		return null;
	}

	public Person deletePersonById(String p) {
		return null;
	}

	public Person findPersonById(String p) {
		return null;
	}
}

class StudentCrudSub extends StudentCrudImpl2<String>
{
	void submethod()
	{
		System.out.println(this.a);//a为String类型
	}
}


class Mygenerics<S,I>//在定义对象时确定泛型的类型
{
	 S s;
	 I i;
}

class A<T>
{
	void m(A<?>a){}
}
public class Test {

	static void f1()//将字符串转化为字符型数组
	{
		String s="ABCDEFG";
		char[] c=s.toCharArray();
		for(char i:c)
		{
			System.out.println(i);
		}
	}
	public static void main(String[] args) {
		//测试class Mygenerics
		Mygenerics<String,Integer> mg=new Mygenerics<String,Integer>();//前面的<>必须写,后面可以不写
		mg.i=1;//Integer类型
		mg.s="哈哈";//String类型
		
		//测试lass A<T>中的?通配符
		A<Object> a=new A<Object>();
		A<String> b=new A<String>();
		a.m(b);

	}

}

泛型使用时的注意事项

1)泛型不能在类中声明静态常量属性
final修饰的属性必须在声明的同时初始化,所以泛型不能声明常量
static修饰的属性是静态属性,先于对象,泛型类型取决于创建对象时传入的实际类型,所以泛型不能声明静态属性
综上所述:不能使用泛型声明静态或常量属性

2)泛型不能在类中初始化数组,但是可以声明数组
初始化数组时需要给元素进行分配空间,但是泛型类型不确定无法分配空间

3)在类中不能使用泛型声明参数个数相同的重载方法
当一个类中有两个泛型时,创建对象时,两个泛型使用相同类型替换,那么重载方法就是相同的方法(同名,参数列表也相同)

4)使用不同实际类型创建出的泛型类对象的引用不可以相互赋值

 

受限泛型

1)<? extends T>:表示T类或者T类的子类
2)<? super T>:表示T类或者T类的父类
3)<?>:表示任意类型

 

泛型应用在集合上

泛型在集合中应用,表示的是集合中元素的类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值