Java泛型类的定义和使用

Java泛型是指编写的代码可以用于不同类型的对象,在编译时被检查的编程机制。Java泛型类在定义和使用上相对简单,但仍然需注意一些技巧和规则。

一、泛型类的定义

泛型类可以定义在类名后面的尖括号里,用于限定类中的变量类型。对于泛型类,需要注意以下几点:

1、泛型类的类型参数

泛型类的类型参数定义在类名后面的尖括号内。泛型类的类型参数可以有多个,它们之间用逗号分隔。类型参数可以在类中任意使用,作为类型变量使用,可以作为属性类型、方法参数类型、方法返回类型等。

public class GenericsClass<T, U> { 
    private T obj1; 
    private U obj2; 
     
    public GenericsClass(T obj1, U obj2) { 
        this.obj1 = obj1; 
        this.obj2 = obj2; 
    } 

    public T getObj1() { 
        return obj1; 
    } 

    public U getObj2() { 
        return obj2; 
    } 
} 

2、在实例化泛型类时指定类型参数

在实例化泛型类时需要指定类型参数,即使只有一个类型参数也要加上尖括号。当实例化泛型类时,所有的T类型都将被具体的类型替换。

GenericsClass<Integer, String> obj = new GenericsClass<Integer, String>(100, "Guru99");

二、使用泛型类

泛型类可以像普通类一样使用。但是,由于可以指定不同的参数类型,因此可以更灵活地使用方法和属性。以下是使用泛型类的示例:

public class Main { 
    public static void main(String[] args) { 
        GenericsClass<Integer, String> obj = new GenericsClass<Integer, String>(100, "Guru99"); 
        System.out.println(obj.getObj1()); 
        System.out.println(obj.getObj2()); 
    } 
}

上面的代码输出结果为:

100

Guru99

三、泛型方法的定义和使用

泛型方法是指定义时带有类型参数的方法。泛型方法和泛型类一样,可以用于处理多种类型的数据。以下是使用泛型方法的示例:

1、定义泛型方法

泛型方法中的参数类型不是固定的,而是动态的。定义泛型方法时,需要在方法的返回类型前放置类型参数声明。当调用泛型方法时,可以在方法名前指定类型参数或自动推断类型参数。

public class GenericsMethod { 
    public <T> void printArray(T[] inputArray) { 
        for (T element : inputArray) { 
            System.out.printf("%s ", element); 
        } 
        System.out.println(); 
    } 
}

2、使用泛型方法

不像普通方法一样,泛型方法需要在调用时指定类型参数,或可以被自动推断。下面是使用泛型方法的示例:

public class Main { 
    public static void main(String[] args) { 
        Integer[] intArray = { 1, 2, 3, 4, 5 }; 
        Double[] doubleArray = { 1.1, 2.2, 3.3, 4.4 }; 
        Character[] charArray = { 'H', 'E', 'L', 'L', 'O' }; 

        GenericsMethod genericsMethod = new GenericsMethod(); 
        System.out.println("Array integerArray contains:"); 
        genericsMethod.printArray(intArray); 
          
        System.out.println("\nArray doubleArray contains:"); 
        genericsMethod.printArray(doubleArray); 
          
        System.out.println("\nArray characterArray contains:"); 
        genericsMethod.printArray(charArray); 
    } 
}

上面的代码输出结果为:

Array integerArray contains:

1 2 3 4 5

Array doubleArray contains:

1.1 2.2 3.3 4.4

Array characterArray contains:

H E L L O

四、通配符

通配符(Wildcard)是一种类型参数,用于表示“任意类型”。可以在方法的参数中使用通配符,以增加参数的灵活性。可以使用“?”代替具体的类型,如“List”。

以下是使用通配符的示例:

public class GenericsWildcard { 
    public static double sumList(List<? extends Number> list) { 
        double sum = 0.0; 
        for (Number i : list) { 
            sum += i.doubleValue(); 
        } 
        return sum; 
    } 
}

通过使用通配符,可以处理不同的类型,例如:

public class Main { 
    public static void main(String[] args) { 
        List<Integer> intList = Arrays.asList(1, 2, 3); 
        List<Double> doubleList = Arrays.asList(1.2, 2.3, 3.4); 

        System.out.println("The sum of the integer list is " + GenericsWildcard.sumList(intList)); 
        System.out.println("The sum of the double list is " + GenericsWildcard.sumList(doubleList)); 
    } 
}

上面的代码输出结果为:

The sum of the integer list is 6.0

The sum of the double list is 6.9

原创文章,作者:XPOO,如若转载,请注明出处:https://www.506064.com/n/148825.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
XPOOXPOO
上一篇 2024-11-04 17:48
下一篇 2024-11-04 17:48

相关推荐

  • Java JsonPath 效率优化指南

    本篇文章将深入探讨Java JsonPath的效率问题,并提供一些优化方案。 一、JsonPath 简介 JsonPath是一个可用于从JSON数据中获取信息的库。它提供了一种DS…

    编程 2025-04-29
  • java client.getacsresponse 编译报错解决方法

    java client.getacsresponse 编译报错是Java编程过程中常见的错误,常见的原因是代码的语法错误、类库依赖问题和编译环境的配置问题。下面将从多个方面进行分析…

    编程 2025-04-29
  • Java Bean加载过程

    Java Bean加载过程涉及到类加载器、反射机制和Java虚拟机的执行过程。在本文中,将从这三个方面详细阐述Java Bean加载的过程。 一、类加载器 类加载器是Java虚拟机…

    编程 2025-04-29
  • Java腾讯云音视频对接

    本文旨在从多个方面详细阐述Java腾讯云音视频对接,提供完整的代码示例。 一、腾讯云音视频介绍 腾讯云音视频服务(Cloud Tencent Real-Time Communica…

    编程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介绍

    本文将详细介绍Java Milvus SearchParam withoutFields的相关知识和用法。 一、什么是Java Milvus SearchParam without…

    编程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java语言中的一个版本,于2014年3月18日发布。本文将从多个方面对Java 8中某一周的周一进行详细的阐述。 一、数组处理 Java 8新特性之一是Stream…

    编程 2025-04-29
  • Java判断字符串是否存在多个

    本文将从以下几个方面详细阐述如何使用Java判断一个字符串中是否存在多个指定字符: 一、字符串遍历 字符串是Java编程中非常重要的一种数据类型。要判断字符串中是否存在多个指定字符…

    编程 2025-04-29
  • Python3定义函数参数类型

    Python是一门动态类型语言,不需要在定义变量时显示的指定变量类型,但是Python3中提供了函数参数类型的声明功能,在函数定义时明确定义参数类型。在函数的形参后面加上冒号(:)…

    编程 2025-04-29
  • VSCode为什么无法运行Java

    解答:VSCode无法运行Java是因为默认情况下,VSCode并没有集成Java运行环境,需要手动添加Java运行环境或安装相关插件才能实现Java代码的编写、调试和运行。 一、…

    编程 2025-04-29
  • Java任务下发回滚系统的设计与实现

    本文将介绍一个Java任务下发回滚系统的设计与实现。该系统可以用于执行复杂的任务,包括可回滚的任务,及时恢复任务失败前的状态。系统使用Java语言进行开发,可以支持多种类型的任务。…

    编程 2025-04-29

发表回复

登录后才能评论