Java基础遨游Java 泛型海洋

简介: Java基础遨游Java 泛型海洋

前言


  有时候在项目开发过程中,很多可以使用复用的部分。在接下来讲解的泛型泛型进行相对于传统上的形参,可以使我们的参数具有更多类型上的变化,使代码能更好地复用。


什么是泛型?


  泛型,即“参数化类型”,在面向对象编程及各种设计模式中有非常广泛的应用。Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。 泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。


为什么要使用泛型?


  操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。一些强类型程序语言支持泛型,其主要目的是加强类型安全及减少类转换的次数,但一些支持泛型的程序语言只能达到部分目的。


泛型类


泛型类的规则


  • 泛型类在类名后面添加了类型参数声明部分。
  • 泛型类的类型参数声明部分可以是一个或多个类型参数,参数间用逗号隔开。


泛型类的格式


class GenericsTest<T> {
    private T t;
    public void add(T t) {
        this.t = t;
    }
    public T getTest() {
        return t;
    }
}


泛型接口


  定义一个泛型接口   在实现泛型的接口未传入泛型实参时,与泛型类的定义相同,在声明类的时候,需将泛型的声明也一起加到类中。

public interface Map<K,V> {
}


泛型方法


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


泛型方法的规则


  泛型方法的规则如下:

  • 所有泛型方法声明都有一个由尖括号分隔类型参数声明部分,该类型参数声明部分在方法返回类型之前。
  • 类型参数声明部分可以是一个或多个类型参数,参数间用逗号隔开。
  • 类型参数能被用来声明返回值类型,并且能作为泛型方法得到的实际参数类型的占位符。
  • 类型参数只能代表引用型类型。


泛型方法格式


  泛型方法格式如下

// 泛型方法                         
   public static < E > void testMethod( E e ){
        // 逻辑处理        
        System.out.println(e);
    }

  

下面用一个简单的示例进行介绍。其中printInfo()是一个泛型的方法,其功能是接收到数组参数之后,输出数组的类型,然后将数组中的元素进行按顺序输出到控制台。 其中进行了三个数据类型的数组,分别是int、double、character。 都初始化好之后,调用泛型方法printInfo()输出数组元素。


public static void main(String[] args) {
        Integer[] intArray = { 1, 2, 3, 4, 5 ,6 };
        Double[] doubleArray = { 1.1, 2.2, 3.3, 4.4 };
        Character[] charArray = { 'J', 'u', 'E', 'J', 'I', 'N' };
        printInfo(intArray);
        printInfo(doubleArray);
        printInfo(charArray);
    }
    public static <E> void printInfo(E[] e){
        System.out.println(e.getClass().getTypeName());
        for(E e1 :e){
            System.out.println(e1);
        }
    }


  调用泛型方法printInfo()输出数组元素。输出结果如下:

image.png

目录
相关文章
|
3天前
|
安全 Java
Java进阶之泛型
【7月更文挑战第10天】Java泛型,自Java 5引入,旨在提升类型安全和代码重用。通过泛型,如List&lt;String&gt;,可在编译时捕获类型错误,防止ClassCastException。泛型包括泛型类、接口和方法,允许定义参数化类型,如`class className&lt;T&gt;`,并用通配符&lt;?&gt;、extends或super限定边界。类型擦除确保运行时兼容性,但泛型仅做编译时检查。使用泛型能增强类型安全性,减少强制转换,提高性能。
12 1
|
3天前
|
Java
Java进阶之泛型
Java进阶之泛型
7 1
|
7天前
|
Java 程序员
深入理解Java中的泛型编程
深入理解Java中的泛型编程
|
12天前
|
存储 安全 Java
|
17天前
|
存储 安全 Java
JAVA 泛型新篇章:编译时类型安全的新境界!
【6月更文挑战第28天】Java 泛型增强了编译时类型安全,避免运行时类型转换异常。例如,未使用泛型的代码可能因隐含的类型转换抛出`ClassCastException`。泛型允许指定容器如`List&lt;String&gt;`的元素类型,确保编译期检查。此外,泛型类如`Stack&lt;T&gt;`能适应多种类型,提高代码重用。使用泛型方法如`&lt;T&gt; void processElements(List&lt;T&gt;)`可增强方法的通用性。泛型是Java中提升可靠性和灵活性的关键工具。
|
5天前
|
安全 Java 编译器
Java面试题:解释Java泛型的主要用途,并说明泛型擦除的概念。
Java面试题:解释Java泛型的主要用途,并说明泛型擦除的概念。
6 0
|
5天前
|
存储 安全 Java
Java面试题:请解释Java中的泛型集合框架?以及泛型的经典应用案例
Java面试题:请解释Java中的泛型集合框架?以及泛型的经典应用案例
10 0
|
7天前
|
Java 程序员
深入理解Java中的泛型编程
深入理解Java中的泛型编程
|
14天前
|
安全 算法 Java
Java中的泛型详解:边界、类型擦除与实际应用
Java中的泛型详解:边界、类型擦除与实际应用
|
17天前
|
存储 安全 Java
JAVA泛型:类型安全,从编译时开始!
【6月更文挑战第28天】Java泛型是JDK 5引入的特性,用于在编译时实现类型安全的集合。它通过类型参数增强代码灵活性和重用性,减少错误。示例展示了泛型列表`List&lt;Integer&gt;`和`List&lt;String&gt;`如何确保元素类型正确,防止编译时类型不符。泛型提升了代码的类型安全、可读性和维护性。