泛型

概述

为什么使用泛型

  • 在Java增加泛型之前,泛型程序设计使用继承来实现的。
  • 缺点:
    - 需要进行强制类型转换
    - 可向集合中添加任意类型的对象,存在风险。

泛型的使用

方式一:

List<String> list=new ArrayList<String>();

方式二:

在JavaSE7以后的版本中,构造方法中可以省略泛型类型。

List<String> list=new ArrayList<>();

多态与泛型

错误例子:

  • class Animal{}
  • class Cat extends Animal{}
  • List list = new ArrayList();

//变量声明的类型必须匹配传递给实际对象的类型

主要内容

  • 泛型作为方法参数
  • 自定义泛型类
  • 自定义泛型方法

泛型作为方法参数

定义子类:

package com.imooc.generic;

public class Book extends Goods {

	@Override
	public void sell() {
		System.out.println("sell books");

	}

}

定义泛型方法:

package com.imooc.generic;

import java.util.List;

public class GoodsSeller {
	public void sellGoods(List<? extends Goods> goods){
		//调用集合中的sell方法
		for(Goods g:goods){
			g.sell();
		}
	}
}

定义主方法:

package com.imooc.generic;

import java.util.ArrayList;
import java.util.List;

public class GoodsTest {

	public static void main(String[] args) {
		//定义book相关的List
		List<Book> books=new ArrayList<Book>();
		books.add(new Book());
		books.add(new Book());
		//定义chothes相关的List
		List<Clothes> clothes=new ArrayList<Clothes>();
		clothes.add(new Clothes());
		clothes.add(new Clothes());
		//定义shoes相关的List
		List<Shoes> shoes=new ArrayList<>();
		shoes.add(new Shoes());
		shoes.add(new Shoes());
		
		GoodsSeller goodsSeller=new GoodsSeller();
		goodsSeller.sellGoods(books);
		goodsSeller.sellGoods(clothes);
		goodsSeller.sellGoods(shoes);
	}

}

//运行结果:
sell books
sell books
sell clothes
sell clothes
sell shoes 
sell shoes 

自定义泛型类

在类名称后面加上<>,T是创建对象时传入的的对象类型。

package com.imooc.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());
	}
}

自定义泛型方法

在访问修饰符public和返回值void中间加上<>

package com.imooc.generic;

public class GenericMethod {
	public <T extends Number> void printValue(T t){
		System.out.println(t);
	}
	
	public static void main(String[] args){
		GenericMethod gm=new GenericMethod();
		
		gm.printValue(123);
		gm.printValue(5.0f);
	}
}

//运行结果
123
5.0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值