java 泛型类型参数6_【6】Java泛型

一、什么是泛型

1、泛型其实就是在定义类、接口、方法的时候不局限地指定某一种特定类型,而让类、接口、方法的调用者来决定具体使用哪一种类型的参数。

​2、比如一个水杯生产的时候不用指定它将来干什么?而是由将来的使用者决定放入什么。

3、假定我们有这样一个需求:写一个排序方法,能够对整型数组、字符串数组甚至其他任何类型的数组进行排序,该如何实现?

答案是可以使用 Java 泛型。

使用 Java 泛型的概念,我们可以写一个泛型方法来对一个对象数组排序。然后,调用该泛型方法来对整型数组、浮点数数组、字符串数组等进行排序。

二、泛型的使用

List.list=new ArrayList();

List list=new ArrayList<>();//java SE7以后的版本中,构造方法中可以省略泛型类型

三、泛型作为方法参数

这里用案例举例

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

//父类、抽象类

public abstract classGoods {//抽象方法

public abstract voidsell();

}

父类Goods

8f900a89c6347c561fdf2122f13be562.pngShoes

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

//继承父类

public class Book extendsGoods {//重写抽象方法

@Overridepublic voidsell() {

System.out.println("sell books");

}

}

Book

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

//继承父类

public class Clothes extendsGoods {//重写抽象方法

@Overridepublic voidsell() {

System.out.println("sell clothes");

}

}

Clothes

mport java.util.List;

//买商品的方法public classGoodsSeller {//泛型作为参数的方法:传进来的参数是一个泛型//加上通配符?表示允许Goods及其子类

public void sellGoods(List extends Goods> goods){//(List goods)//调用集合中的sell方法//增强for循环遍历list,输出信息

for(Goods g:goods){

g.sell();

}

}

}

importjava.util.ArrayList;importjava.util.List;public classGoodsTest {public static voidmain(String[] args) {//定义book相关的List

List books=new ArrayList();

books.add(newBook());

books.add(newBook());//定义chothes相关的List

List clothes=new ArrayList();

clothes.add(newClothes());

clothes.add(newClothes());//定义shoes相关的List

List shoes=new ArrayList<>();

shoes.add(newShoes());

shoes.add(newShoes());//对象 调用 方法

GoodsSeller goodsSeller=newGoodsSeller();

goodsSeller.sellGoods(books);

goodsSeller.sellGoods(clothes);

goodsSeller.sellGoods(shoes);

}

}

四、自定义泛型类

自定义泛型相当于把类进行了参数化,具体类型由传入的参数来决定。泛型用的符号是任意的,一般采用T或E。

具体地,对于类 public class NumGeneric{},泛型T表示NumGeneric类会使用T作为类中某些成员变量的类型、方法参数的类型或方法返回值的类型等。

至于T具体会是什么类,则由实例化NumGeneric对象时传入的泛型参数来决定,如下第11行代码则是以Integer类作为具体的泛型类型。

1 public class NumGeneric{2 privateT num;3 publicT getNum(){4 returnnum;5 }6 public voidsetNum(T num){7 this.num=num;8 }9 //测试

10 public static voidmain(String[] args){11 NumGeneric intNum=new NumGeneric<>();12 intNum.setNum(10);13 System.out.println("Integer:"+intNum.getNum());14

15 NumGeneric floatNum=new NumGeneric<>();16 floatNum.setNum(5.0f);17 System.out.println("Float:"+floatNum.getNum());18 }19 }

五、自定义泛型方法

1、泛型可以声明在类的声明中,这些类可称为泛型类。

如对于类 public class NumGeneric{},泛型T,X表示NumGeneric类会使用T和X作为类中某些成员变量的类型、方法参数的类型或方法返回值的类型等。

2、泛型也可以直接声明在非泛型类中的方法声明中,这些方法可称为泛型方法。如对于

public class GenericMethod{

--public void println(T t){...}

}

而言,即是将泛型声明在非泛型类中的方法声明中,其中表示传入的泛型T必须是Number类及其子类对象,写在这里是对传入的泛型T的一种限定。

public classGenericMethod {public voidprintValue(T t){// 则只能传入number及其子类

System.out.println(t);

}public static voidmain(String[] args){

GenericMethod gm=newGenericMethod();

gm.printValue(123);

gm.printValue("hello");

gm.printValue(5.0f);

}

}

68f724bad5a33d9a9f6bd2ca7369ecb7.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值