Java 泛型 学习笔记

本文深入浅出地介绍了Java泛型的基本概念、特性和使用方法,包括泛型方法、泛型通配符等,并通过示例代码展示了如何使用泛型简化编程任务。

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

1 基本概念

从字面理解为“泛指的的参数类型”,即可定制的类型。
泛型的本质是为了参数化类型,也就是说在使用的过程中,操作的数据类型被指定为一个参数。

2 泛型特性

泛型只在编译阶段有效。
在编译的过程中,正确检验泛型结束后,会将泛型相关信息擦除,并且在对象进入和离开方法的边界处添加类型检查和类型转换的方法。
也就是说,泛型信息不回进入到运行阶段。

3 泛型方法

我们可以写一个泛型方法,该方法在调用时接收不同类型的参数。根据传递给泛型方法的参数类型,编译器适当的处理每一个方法调用。

  • 定义泛型方法的规则:
    (1)所有的泛型方法都有一个类型参数声明部分,由尖括号分隔,在返回类型之前
    (2)每个类型参数声明部分包含一个或者多个类型参数,参数间用逗号隔开
    (3)类型参数只能代表调用类型,不能是原始类型(int无法代替object)

4 泛型的通配符

氛围限定性通配符和非限定性通配符两种。

  • 对于限定性通配符:
    (1)<?extend T> 保证泛型类型必须是T的子类来设定泛型上边界
    (2)<?super T>保证泛型类型必须是T的父类来设定泛型下边界,泛型类型必须要用限定的类型进行初始化

  • 非限定性通配符

    <?> 可用任意泛型类型类替代

5 泛型实例

  • 1 如何使用泛型打印不同的字符串元素
public class GenericMethodTest
{
   // 泛型方法 printArray                         
   public static < E > void printArray( E[] inputArray )
   {
      // 输出数组元素            
         for ( E element : inputArray ){        
            System.out.printf( "%s ", element );
         }
         System.out.println();
    }
 
    public static void main( String args[] )
    {
        // 创建不同类型数组: Integer, Double 和 Character
        Integer[] intArray = { 1, 2, 3, 4, 5 };
        Double[] doubleArray = { 1.1, 2.2, 3.3, 4.4 };
        Character[] charArray = { 'H', 'E', 'L', 'L', 'O' };
 
        System.out.println( "整型数组元素为:" );
        printArray( intArray  ); // 传递一个整型数组
 
        System.out.println( "\n双精度型数组元素为:" );
        printArray( doubleArray ); // 传递一个双精度型数组
 
        System.out.println( "\n字符型数组元素为:" );
        printArray( charArray ); // 传递一个字符型数组
    } 
}

编译上面的代码,运行结果如下:

整型数组元素为:
1 2 3 4 5 

双精度型数组元素为:
1.1 2.2 3.3 4.4 

字符型数组元素为:
H E L L O 
  • 2 利用泛型实现不同类型的数相加

程序在编写的过程中只考虑到int哥double类型的数据,产生了int+int,double+double,int+double三种不用的组合方式
相加的数写在sum的括号里面即可,每次进行赋值

import com.sun.corba.se.impl.orb.ParserTable.TestBadServerIdHandler;

public class Add{
    public <T extends Number> double add(T t1, T t2) {
        double allsum;
        allsum = t1.doubleValue() + t2.doubleValue();
        return allsum;
    }
    public void testAdd() {
        int int1 = 1;
        int int2 = 2;
        System.out.println("Integer sum is: " + add(int1, int2));

        long long1 = 100;
        long long2 = 200;
        System.out.println("Long sum is: " + add(long1, long2));

        float f1 = 1.0f;
        float f2 = 2.0f;
        System.out.println("Float sum is: " + add(f1, f2));

        double d1 = 1.0;
        double d2 = 2.0;
        System.out.println("Double sum is: " + add(d1, d2));
    }
    public static void main(String[] args) {
        Add my=new Add();
        my.add(10,2.5f);
        my.testAdd();
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值