Java泛型一:泛型的定义及规则

本文介绍了Java SE 1.5中新引入的泛型特性,详细解释了泛型的概念、定义及其实现方式。同时探讨了泛型带来的好处,如增强类型安全性、减少强制类型转换等,并通过具体的代码示例对比了使用泛型前后的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

泛型定义

泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 Java语言引入泛型的好处是安全简单。

用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是一个安全隐患。

泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,以提高代码的重用率。

泛型规则限制

1、泛型的类型参数只能是类类型(包括自定义类),不能是简单类型; 
2、同一种泛型可以对应多个版本(因为参数类型是不确定的),不同版本的泛型类实例是不兼容的; 
3、泛型的类型参数可以有多个; 
4、泛型的参数类型可以使用extends、super语句,例如。习惯上称为“有界类型“; 
5、泛型的参数类型还可以是通配符类型。例如Class<?> classType = Class.forName("java.lang.String");

示例对比

有这样一个需求:定义矩形对象,使矩形对象的宽度、高度既可以支持整形又可以支持字符串类型(例子可能不太恰当~~)。在不使用泛型的情况下,我们可能会定义两个类,一个类支持整形参数,另一个类支持字符串类型参数,如下:

RectangleInteger

public class RectangleInteger {

    private Integer width;
    private Integer height;

    public RectangleInteger(Integer width, Integer height) {
        this.width = width;
        this.height = height;
    }

    public Integer getWidth() {
        return width;
    }

    public void setWidth(Integer width) {
        this.width = width;
    }

    public Integer getHeight() {
        return height;
    }

    public void setHeight(Integer height) {
        this.height = height;
    }

    public void showDetails(){
        System.out.println("the rectangle, width is " + this.width + " height is " + this.height);
    }
}

RectangleString

public class RectangleString {
    private String width;
    private String height;

    public RectangleString(String width, String height) {
        this.width = width;
        this.height = height;
    }

    public String getWidth() {
        return width;
    }

    public void setWidth(String width) {
        this.width = width;
    }

    public String getHeight() {
        return height;
    }

    public void setHeight(String height) {
        this.height = height;
    }

    public void showDetails(){
        System.out.println("the rectangle, width is " + this.width + " height is " + this.height);
    }
}

Rectangle<T>

public class Rectangle<T> {
    private T width;
    private T height;

    public Rectangle(T width, T height) {
        this.width = width;
        this.height = height;
    }

    public T getWidth() {
        return width;
    }

    public void setWidth(T width) {
        this.width = width;
    }

    public T getHeight() {
        return height;
    }

    public void setHeight(T height) {
        this.height = height;
    }

    public void showDetails(){
        System.out.println("the rectangle, width is " + this.width + " height is " + this.height);
    }
}

作用

再次强调一下泛型的作用:泛型的好处是在编译的时候进行类型安全检查,并且所有的强制转换都是自动和隐式的,以提高代码的重用率。

 

 

 

转载于:https://my.oschina.net/LucasZhu/blog/1581645

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值