Java中的泛型

1 篇文章 0 订阅

泛型

1.概恋

泛型本质本质是参数化类型,泛型提供了编译时类型的安全检测机制,该机制允许程序在编译时检测非法的类型。

2.泛型标记和泛型限定:E 、T 、K 、V 、N 、?

如下表所示:

序号泛型标记说明
1E-Element在集合中使用,表示在集合中存放的元素
2T-Type表示Java类,包括基础的类和我们自定义的类
3K-Key表示键,比如Map中的key
4V-Value表示值
5N-Number表示数值类型
6表示不确定的Java类型

类型通配符符使用 “ ?” 表示所有具体的参数类型,例如 List<?> 在逻辑上是 List 、List等所有 List<具体类型实参> 的父类。

在使用泛型的时候,若希望将类的继承关系加入泛型应用中,就需要对泛型做限定,具体的泛型限定有对泛型限定有对泛型上线的限定和对泛型下线的限定。

1.对泛型上限的限定:<? extends T>

在Java中使用通配符 " ? " 和 " extends " 关键字指定泛型的上限,具体用法为 <? extends T> ,它表示该通配符所代表的类型是 T 类的子类或者接口 T 的子接口。

2.对泛型下限的限定:<? super T>

在Java中,使用通配符 “ ?” 和 “ super ” 关键字指定泛型的下限,具体用法为 <? super T>,它表示该通配符所代表的类型是 T 类型的父类或者父接口。

3.泛型的方法

泛型的方法指将方法的参数类型定义为泛型,以便在调用时接收不同的类型的参数。在方法的内部根据传递给泛型方法的不同参数类型执行不同的处理方法。

public static void main(String args){
    generalMethod("1" , 2 , new Worker());
}

//定义泛型方法 generalMethod ,printArray
public static <T> void generalMethod(T... inputArray){
    for (T element : inputArray){
        if (element instanceof Integer){
             System.out.println("处理 Integer 类型数据中...");
        }else if (element instanceof String){
            System.out.println("处理 String 类型数据中...");
        }else if (element instanceof Double){
            System.out.println("处理 Double 类型数据中...");
        }else if (element instanceof Float){
            System.out.println("处理 Float 类型数据中...");
        }else if (element instanceof Long){
            System.out.println("处理 Long 类型数据中...");
        }else if (element instanceof Boolean){
            System.out.println("处理 Boolean 类型数据中...");
        }else if (element instanceof Date){
            System.out.println("处理 Date 类型数据中...");
        }
        else if (element instanceof Wroker){
            System.out.println("处理 Wroker 类型数据中...");
        }
    }
}
Java泛型通配符用于解决类型安全问题,并提供了一种方法来引用类型,而不需要知道具体的类型参数。通配符主要有以下几种形式: 1. `?`:无界通配符,表示未知的类型,可以匹配任何对象的类型。 2. `<? extends 类或接口>`:表示具体的类型,但不是确定的类型。`extends`在这里的意思是“某种类型的子类”。这可以用来限定类型参数的上界,只允许该通配符引用某个类型或其子类型。 3. `<? super 类或接口>`:表示具体的类型,但不是确定的类型。`super`在这里的意思是“某种类型的父类”。这可以用来限定类型参数的下界,只允许该通配符引用某个类型或其父类型。 4. `? extends 类型1 & 类型2 & ... & 类型n>`:表示有限制的通配符,可以引用同时满足多个上限类型约束的类型。 使用泛型通配符的目的是为了增强代码的灵活性,同时保证类型安全。例如,如果有一个泛型方法需要接受任何类型的`List`作为参数,但不想限制这个`List`只能包含特定类型的对象,那么可以使用无界通配符`<?>`。 下面是一个简单的例子,来说明如何使用泛型通配符: ```java public class GenericWildcardExample { public static void processElements(List<?> elements) { for (Object element : elements) { // 处理元素,但不知道元素的实际类型 } } } ``` 在这个例子,`processElements`方法可以接受任何类型的`List`对象作为参数,但在方法内部,我们只能将元素当作`Object`类型来处理。 使用泛型通配符的注意事项: - 不能实例化泛型通配符。 - 不能使用带有泛型通配符的类型作为方法的参数类型,因为这会导致在调用时出现类型安全问题。 - 如果要向泛型集合添加元素,那么只能添加`Object`类型的元素,因为编译器不知道集合具体存储的是哪种类型的对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值