范型和范型使用

范型

只在编译阶段有效,编译后,jvm会去除范型,也就是说在运行阶段范型是没有效果的。

Java 语言中泛型只在程序源码中存在,在编译后的字节码文件中,就已经替换为原来的原生类型,并且在相应的地方插入了强制类型转换的代码。因此对于运行期的 Java 语言来说, ArrayList 与 ArrayList 是同一个类型,所以泛型实际上是 Java 语言的一个语法糖,这种泛型的实现方法称为类型擦除。

范型通配符
1. 无边界通配符:?
public void print(List<?> list){
  for(int i=0;i<list.size();i++){
  	system.out.print(list.get(i));
  }
}
2.上边界通配符:?extends Number

通用的类型必须是Number及其子类,本例中就是必须是Long、Double、Byte、Integer、Short、Float中的一中;

在这里插入图片描述

3.下边界通配符:?super Integer

通用类型必须是Integer及其父类,本例中就必须是Integer、Number、Object中的一种,否则报错

范型使用

范型需要先声明在使用;范型的声明使用"<>"实现;

//没有声明范型的情况
public T fund(T t){
	return (T)null;
}
//声明范型的情况:范型声明<T>
public <T> T fund(T t){
	return (T)null;
}
范型类

范型类,可以增加代码的灵活度,

public class Person <T> { 
	private T t;
	public void set(T t){
		this.t = t;
	}
	public T get(){
		return t;
	}
}
范型方法

普通方法,可以使用类上定义的范型,也可以使用方法上定义地的范型,

public class Demo <K,V> {
	//1、使用类定义的范型
	public K get(K k,V v){
		return (K)null;
	}
	//2、使用方法定义的范型
	public <T> T getT(T t,V v){
		return (K)null;
	}
	//3、静态方法中,不可以使用类中定义地的范型,只能使用方法中定义的范型
	public static <K> K method(){
		return (K)null;
	}
}

静态方法中,不可以使用类中定义地的范型,只能使用方法中定义的范型

范型接口

定义一个加法计算的接口

public interface Generic{
	add(int a,int b);
}
public class IntGeneric impliments Generic{
	add(int a,int b){
		return a+b;
	}
}

以上是一个已经实现了接口的字类;但是,如果现在需要计算double类型的加法运算,这时接口就不能满足,需要重新添加接口,这是不是很麻烦;
以上需求可以通过范型接口来实现,这样以来就可以在添加和修改接口的情况下扩展其他类型的计算了。

public interface Generic<T>{
	add(T a,T b);
}
//int类型的计算
public class IntGeneric impliments Generic<int>{
	add(int a,int b){
		return a+b;
	}
}
//double类型的计算
public class IntGeneric impliments Generic<Double>{
	add(double a,double b){
		return a+b;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值