泛型简介

问题:如果我们需要产生多个对象,对每个对象的逻辑完全一样,只是对象内的成员变量的类型不同。那么我们如何去做?

*创建多个类文件,给每个类钟的成员变量设置制定的数据类型
缺点:这种方式导致类的膨胀,重用性太差
*创建一个类文件,给这个类钟的成员变量设置Object数据类型
缺点:编译的时候正常,但运行的时候可能会异常


泛型简介
*泛型可以在编译的时候检查 类型安全,并且所有的 强制转换都是自动和隐式的。
*原理就是“ 类型的参数化”,即把类型看作参数。也就是说把所有操作的数据类型看做参数,就行方法的形式参数是运行时传递的值得占位符一样。
*简单说, 类型变量扮演的角色就如同一个参数,他提供给编译器用来类型检查的信息。
*泛型可以提高代码的拓展性和重用性

总结:所谓泛型,即通过类型参数化来实现在同一份代码上操作多种类型数据,泛型编程是一种编程范式,他利用“参数化类型”将类型抽象化,从而实现更灵活的复用

示例——泛型类
public class GenClass <T>{
private T obj;
public GenClass (T obj) {
this.obj = obj;
}
public T getObj() {
return obj;
}
public void setObj(T obj) {
this.obj = obj;
}
}
public class GenericDemo {
public static void main(String[] args) {
//创建一个泛型类对象
GenClass<String> gen1 = new GenClass<String>("hahaha");
System.out.println(gen1.getData());
GenClass<Integer> gen2 = new GenClass<Integer>(100);
System.out.println(gen2.getClass());
}


}


//创建一个泛型类
class GenClass<T>{
private T data;
public GenClass(T data) {
this.data = data;
}
public void setData(T data) {
this.data = data;
}
public T getData() {
return data;
}
}

1、泛型的类型参数可以是泛型类
2、泛型类可以同时设置多个类型参数
3、泛型类可以继承泛型类
4、泛型类可以实现泛型接口


限制泛型可用类型
在定义泛型类别时,默认在实例泛型类的时候可以使用任何类型,但是如果想要限制泛型类型时,只能用某个特定类型或者其子类型才能实例化该类型时,可以在定义类型时,使用 extends关键字指定这个类型必须是 继承某个类,或者 实现某个接口
A<T>
A<T ectends B>

当没有指定类型的类型或接口时,默认使用 extends Object,所以默认情况下任何类型都可以做为参数传入
package generic;


public class GenericDemo3 {
public static void main(String[] args) {
GenericClass<Dog> dogClass = new GenericClass<Dog>();
dogClass.setObj(new Dog());
dogClass.getObj().eat();

GenericClass<Cat> catClass = new GenericClass<Cat>();
catClass.setObj(new Cat());
catClass.getObj().eat();



}


}


class GenericClass<T extends Animal>{
private T obj;
public void setObj(T obj) {
this.obj = obj;
}
public T getObj() {
return obj;
}
}
abstract class Animal{
public abstract void eat();
}


class Dog extends Animal{
public void eat() {
System.out.println("骨头");
}
}


class Cat extends Animal{
public void eat() {
System.out.println("鱼");
}
}






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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值