Java泛型——自定义泛型类、自定义泛型方法
注:看ArrayList泛型可以Ctrl点ArrayList点进去看源码。
自定义泛型也就是不知道定义的是什么类型的数据,例如下面案例中的T就是。
案例1:自定义泛型类(跟1个参数)
package com.study.generic;
public class NumGeneric<T> {
private T num;
public T getNum(){
return num;
}
public void setNum(T num){
this.num=num;
}
//测试
public static void main(String[] args){
NumGeneric<Integer> intNum=new NumGeneric<>();
intNum.setNum(10);
System.out.println("Integer:"+intNum.getNum());
NumGeneric<Float> floatNum=new NumGeneric<>();
floatNum.setNum(5.0f);
System.out.println("Float:"+floatNum.getNum());
}
}
运行结果:
Integer:10
Float:5.0
案例2:自定义泛型类(跟2个参数)
package com.study.generic;
public class TwoNumGeneric<T,X> {
private T num1;
private X num2;
public void genNum(T num1,X num2){
this.num1=num1;
this.num2=num2;
}
public T getNum1() {
return num1;
}
public void setNum1(T num1) {
this.num1 = num1;
}
public X getNum2() {
return num2;
}
public void setNum2(X num2) {
this.num2 = num2;
}
public static void main(String[] args){
TwoNumGeneric<Integer,Float> numObj=new TwoNumGeneric<>();
numObj.genNum(25, 5.0f);
System.out.println("num1="+numObj.getNum1());
System.out.println("num2="+numObj.getNum2());
}
}
注:这里的genNum()方法起名的意义是generatorNumber,即同时为两个参数赋值。
运行结果:
num1=25
num2=5.0
自定义泛型方法
注:泛型方法不一定写在泛型类里面。
得写在返回值类型之前。
案例1:打印输出泛型方法
package com.study.generic;
public class GenericMethod {
public <T> void printValue(T t){
System.out.println(t);
}
public static void main(String[] args){
GenericMethod gm=new GenericMethod();
gm.printValue(123);
gm.printValue("hello");
gm.printValue(5.0f);
}
}
运行结果:
123
hello
5.0
案例2:打印输出泛型方法
这时发现 gm.printValue("hello");
会报错,这是因为这里只能传入Number类以及它的子类,因此传入字符串类型的数据就会报错。
package com.study.generic;
public class GenericMethod {
public <T> void printValue(T t){
System.out.println(t);
}
public static void main(String[] args){
GenericMethod gm=new GenericMethod();
gm.printValue(123);
// gm.printValue("hello"); // 会报错
gm.printValue(5.0f);
}
}
运行结果:
123
5.0