Java泛型T,E,K,V,N,?与Object区别和含义

Java泛型是Java 5之后引入的新特性,可以让我们编写更加类型安全的代码。在泛型中,T、E、K、V、N 和 ? 是常见的符号。它们代表的是不同的类型参数。

T

T 是 Java 泛型中最常见的类型,表示任意类型。在定义类或方法时,我们可以使用 T 代替所有可能的类型。例如,下面是一个定义了一个泛型类的例子:

public class Box<T> {
    private T t;
    public void set(T t) {
        this.t = t;
    }
    public T get() {
        return t;
    }
}

在类名后面的尖括号里,我们使用 T 定义了一个类型参数。在类中的方法中可以使用 T 代替任意类型,从而实现了一个通用的操作。

E

E 也是一种泛型类型参数,和 T 类似,它表示任意类型。通常被用作集合的元素类型的占位符。例如,使用 E 定义一个简单的列表:

public class MyList<E> {
    private E[] list;
    public MyList(int size) {
        list = (E[])new Object[size];
    }
    public E get(int index) {
        return list[index];
    }
    public void set(int index, E value) {
        list[index] = value;
    }
}

在上面的例子中,我们使用 E 定义了一个类型参数。在类中的各种方法中使用 E 代替了任意类型,实现了一个通用的操作。

K和V

K 和 V 分别表示 Key 和 Value,通常用于表示 Map 中的键/值类型。例如,定义一个简单的 Map 实现:

public class MyMap<K, V> {
    private List<K> keys = new ArrayList<>();
    private List<V> values = new ArrayList<>();
    public void put(K key, V value) {
        keys.add(key);
        values.add(value);
    }
    public V get(K key) {
        int index = keys.indexOf(key);
        if (index != -1) {
            return values.get(index);
        }
        return null;
    }
}

在上面的例子中,我们使用 K 和 V 定义了两个类型参数,用于表示键和值的类型。在 put 和 get 方法中,可以使用 K 和 V 代替任意类型。

N

N 是一个数字类型参数,在 Java 中没有内置数字类型参数,如果需要支持数字类型参数,就需要使用 N。例如,为一个数组排序:

public class Sorter<N extends Number> {
    private N[] array;
    public Sorter(N[] array) {
        this.array = array;
    }
    public void sort() {
        Arrays.sort(array);
    }
}

在上面的例子中,我们使用 N 定义了数字类型参数。在 sort 方法中,可以使用 N 代替任意数字类型,例如 Integer、Double、Float 等。

?

? 表示未知类型参数,通常用于表示不关心具体类型的情况。例如,打印任意类型的数组:

public class Printer {
    public static void printArray(Object[] array) {
        for (Object element : array) {
            System.out.println(element);
        }
    }
}

在上面的例子中,我们使用 Object 类型作为数组的元素类型。在 printArray 方法中,可以使用 ? 代替任意类型,例如 Integer、Double、String 等。使用 ? 表示不关心具体类型,这让代码变得更加灵活。

Object

Object 是一个基本类型,表示所有 Java 对象类型的超类。和泛型 T、E、K、V、N 和 ? 不同,它不能代表任何类型参数。在需要处理具体类型的情况下,我们通常使用 Object。

下面是使用 Object 的例子:

public class Box {
    private Object object;
    public void set(Object object) {
        this.object = object;
    }
    public Object get() {
        return object;
    }
}

在上面的例子中,我们使用 Object 作为 Box 类的成员变量类型。在 set 方法中,可以设置任意类型的值;在 get 方法中,可以返回 Object 类型的值。使用 Object 让代码能够处理任意类型的数据。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java泛型T,E,K,V,N,?与Object区别和含义 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • Java截取字符串的方法

    当处理字符串时,Java提供了多种截取字符串的方式,本文针对这些方法进行详细的讲解,方便读者学习并掌握该技能。 序号方式截取字符串 通过char数组序号的方式截取字符串是Java中最常见的一种方法。该方式是基于Java中String类中的toCharArray()方法,可以将字符串按指定长度分解为多个字符的序列,然后通过循环遍历序列获取需要的部分。 Stri…

    Java 2023年5月26日
    00
  • maven的pom文件与打包详解

    下面是“maven的pom文件与打包详解”的完整攻略。 什么是maven的pom文件 POM(Project Object Model)是Maven中项目的核心文件,它用于描述项目的元数据信息。POM文件是一个XML文件,它包含了用于构建项目的依赖关系、构建设置、插件配置等信息。默认情况下,Maven会在项目根目录找到pom.xml文件,并读取其中的配置信息…

    Java 2023年5月20日
    00
  • MyBatis基于pagehelper实现分页原理及代码实例

    下面是”MyBatis基于pagehelper实现分页原理及代码实例”的完整攻略。 1. 什么是PageHelper PageHelper是一个开源的MyBatis分页插件,它能够实现对MyBatis查询结果的分页操作。PageHelper可以自动进行物理分页,通过PageHelper提供的简单接口,我们能够不必手动编写复杂的分页语句,从而快速地实现数据的分…

    Java 2023年6月15日
    00
  • 浅谈springboot多模块(modules)开发

    浅谈Spring Boot多模块开发 Spring Boot是一个非常流行的Java开发框架,它支持多模块开发。本文将详细介绍Spring Boot多模块开发的方法,包括创建模块、依赖管理、打包等。 1. 创建模块 在Spring Boot中,我们可以使用Maven或Gradle来创建模块。以下是一个使用Maven创建模块的示例: <project&g…

    Java 2023年5月14日
    00
  • Spring boot配置绑定和配置属性校验的方式详解

    以下是关于“Spring boot配置绑定和配置属性校验的方式详解”的完整攻略,包含两个示例说明。 Spring boot配置绑定和配置属性校验的方式详解 背景 在开发 Spring Boot 应用时,我们经常需要配置一些参数,比如数据库连接信息、服务端口等等。而在应用部署时,这些参数也需要灵活地根据不同的环境进行配置,比如开发环境、测试环境、生产环境等等。…

    Java 2023年6月15日
    00
  • Java毕业设计实战之生活旅行分享平台的实现

    Java毕业设计实战:生活旅行分享平台实现攻略 一、需求分析 我们要实现的是一个生活旅行分享平台,用户可以在上面发布分享自己的生活和旅游经历,也可以查看他人的分享,进行点赞、评论等互动操作。 我们需要实现以下功能:- 用户注册和登录- 发布分享、编辑分享、删除分享- 查看分享的列表,包括按照热度、发布时间等排序方式- 点赞分享、取消赞,评论分享、回复评论- …

    Java 2023年5月19日
    00
  • 如何在Java中实现一个散列表

    散列表(Hash Table)是一种以键值对结构存储数据的数据结构,它可以高效地实现插入、删除和查找操作。在Java中,我们可以使用HashMap来实现一个散列表。 下面是实现一个散列表的步骤: 定义一个HashMap对象 在Java中,我们可以使用HashMap来实现散列表。因此,首先要定义一个HashMap对象。我们可以使用以下语法: HashMap&l…

    Java 2023年5月19日
    00
  • Java框架—Spring详解

    Java框架—Spring详解 什么是Spring框架 Spring框架是一个面向对象的Java应用程序开发框架,它通过IoC(依赖注入)和AOP(面向切面编程)实现了高内聚、松耦合的代码设计。 Spring框架可以用来构建各种类型的应用程序,包括Web应用程序、企业应用程序、桌面应用程序等。它被广泛地应用于商业应用开发领域,因为它可以极大地提高开发效率…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部