java中的泛型

本文详细介绍了Java中的泛型,包括其概念、定义、类型擦除、边界、使用场景,以及在泛型方法、类和接口中的应用,强调了泛型如何提高代码重用性和类型安全。
摘要由CSDN通过智能技术生成

泛型

1.1概念

Java中的泛型是一种使类、接口和方法能够处理未知类型的机制。通过泛型,可以在编译时捕获许多类型错误,从而提高了类型安全性。

在Java中,泛型的主要用途是增加代码的重用性,减少代码冗余,以及使类或方法可以处理多种类型的数据。

以下是一些关于Java泛型的要点:

  1. 定义:泛型允许在类、接口或方法定义时指定一个或多个类型参数。这些类型参数在类、接口或方法被实例化时被具体的类型替换。

  2. 类型参数:类型参数使用大写字母表示,后面可能跟着一个问号以表示该类型参数是受限制的。

  3. 通配符:使用问号(?)表示通配符,代表未知的类型。例如,List<?> 表示一个可以包含任何类型的列表。

  4. 类型擦除:由于泛型信息在运行时可能不再可用,因此Java使用类型擦除来删除原始泛型信息,同时保留类型参数在编译时的所有信息。

  5. 边界:通过在类型参数后面添加边界,可以限制类型参数的可能值。例如,List<T extends Number> 表示列表中的元素必须是Number或其子类。

  6. 使用场景:泛型经常用于集合类,如List、Set、Map等,以及自定义类和方法中。

  7. 编译时检查:由于泛型是在编译时处理的,因此所有涉及的类型错误都会在编译时捕获,而不是在运行时。

1.2泛型方法

1.2.1定义格式:修饰符 <类型参数> 返回值类型 方法名(参数列表) { // 方法体 } // 类型参数用大写字母表示
public class GenericsTest1 {
    // 定义泛型继承Number
    public static <T extends Number> double add(T n1,T n2) {  // 只能传递Numebr类型或Number的子类
        double d = n1.doubleValue() + n2.doubleValue();
        return  d;

    }

    public static void main(String[] args) {
        System.out.println(add(1,2)); //3.0
        System.out.println(add(3.5,4.5)); // 8.0
        System.out.println(add('a','b')); // 编译错误
    }
}

1.3泛型类 


class Point<T>{         // 此处可以随便写标识符号,T是type的简称
   private T value ;     // value的类型由T指定,即:由外部指定
   public T getValue(){  // 返回值的类型由外部决定
       return value ;
   }
   public void setValue(T value){  // 设置的类型也由外部决定
       this.value = value ;
   }
}
public class GenericsDemo1{
   public static void main(String args[]){
       Point<String> p = new Point<String>() ;     // 里面的value为String类型
       p.setValue("it") ;                            // 设置字符串 it
       System.out.println(p.getValue().length()) ;   // 取得字符串的长度 2
   }
}
​


1.4泛型接口

interface test<T extends Number> {  // 传递过来的类型只能是Number类或者它的子类
    T getValue(T t); // 返回值为泛型变量
}
​
class testImpl<T extends Number> implements test<T> {  // 实现test类
​
    @Override
    public T getValue(T t) {
        System.out.println(t);
        return t;
    }
}
public class GenericsDemo2 {
    public static void main(String[] args) {
        testImpl<Integer> t = new testImpl<Integer>();  // 传递Integer类型
        t.getValue(4); // 必须传入整形
        
        testImpl<Double> d = new testImpl<>();  // 传递Double类型
        d.getValue(4.0); // 必须传入double值
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值