Java基础之三种泛型

泛型

泛型可以理解成一种标识,形如< T >,它可以标识在类名称之后,属性名之前,方法名之前。


标识在类名之后:class <T> Person
标识在属性之前:private T name;
标识在方法之前:public <T> T getName()
这里可以发现,属性和方法中的数据类型没有出现,泛型代替了它

泛型创建之后如何使用
public class <T>Person{
	private String name;
	private T ID;
	public <S> S fun(){
		......
	}
}

Person类已经创建,在主方法中创建Person类对象如下

Person<String> person = new Person<String>();

注意:这里的String不是类中所有对象使用String,只是Person类的一个叫person的对象使用String类型。

泛型的安全问题-泛型通配符
public class Demo1{
	public static void main(String[] args){
		Person<String> person1 = new Person<String>();
		person1.setName = "入云龙";
		Person<Integer> person2 = new Person<Integer>();
		peron2.setName = 23fun(person1);
	}
	public void fun(Person person) {
		person.setName = 11;
		System.out.println(peron);
	}
} 

在主方法中调用fun方法,传入参数person1,由于fun方法中参数的数据类型没有确定,所以这时候能把person1的Name属性修改成功,泛型通配符可以解决这个安全问题并且不增加耦合,fun方法修改如下

public class Demo1{
	public static void main(String[] args){
		Person<String> person1 = new Person<String>();
		person1.setName = "入云龙";
		Person<Integer> person2 = new Person<Integer>();
		peron2.setName = 23fun(person1);
	}
	public void fun(Person<?> person) {
		System.out.println(peron);
	}
} 
<?>表示你传入的数据是什么数据类型,我便按什么数据类型处理。
泛型的引用传递–界限问题

如上文所讲,<?>可以接受任意数据类型,有的人就受不了,我要如何才能使它不能接收数值型呢?这就牵扯到了界限问题。

<? extends …> 限定上限,<? super …>限定下限

<? extends Number> 表示他只能接收Number数值型的子类,也就是说所有数值型Integer,Long......以外的数据类型都不能使用。<? super String>限定下限,规定只能接收String及它的父类。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值