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计算器,可以按照如下步骤进行。 第一步:设计程序结构和功能 程序结构上可以分为两个模块:输入计算表达式和计算表达式结果。每个模块具体的功能可以分为: 输入表达式:从命令行输入表达式。 计算表达式:解析表达式计算结果。 第二步:代码实现 输入表达式模块 在Java中,可以通过标准库的Scanner类来实现从命令行中读取输入的表达式。具体…

    Java 2023年5月18日
    00
  • Java如何使用正则表达式查找指定字符串

    当我们需要在Java程序中查找某个特定的字符串时,可以使用正则表达式进行匹配。下面是Java如何使用正则表达式查找指定字符串的完整攻略,包含以下步骤: 步骤一:导入java.util.regex包 在使用正则表达式之前,我们需要先导入Java的正则表达式包java.util.regex,以便在代码中使用正则表达式匹配规则。 import java.util.…

    Java 2023年5月27日
    00
  • C++递归算法处理岛屿问题详解

    C++递归算法处理岛屿问题详解 什么是岛屿问题? 岛屿问题是指在一个由字母 O 和 X 组成的二维矩阵中,连成一片的 O 组成的区域被称为一个岛屿。请编写一个 C++ 程序,计算出给定的矩阵中岛屿的数量。 解题思路 解题的基本思路是对每个位置进行深度优先搜索,将和当前位置连通的所有 O 都标记为已访问。如此定义岛屿的个数即为进行深度优先搜索的次数。 接下来让…

    Java 2023年5月19日
    00
  • Java中的多种文件上传方式总结

    下面我将详细讲解“Java中的多种文件上传方式总结”的完整攻略。 Java中的多种文件上传方式总结 背景 在Web应用程序中,常常需要上传文件,例如上传图片、视频、文件等等。Java中有多种文件上传方式,下面将为大家总结这些方式及其优缺点。 方式一:使用Servlet 3.0提供的Part接口进行文件上传 在Servlet 3.0中,新增了Part接口,可以…

    Java 2023年5月20日
    00
  • 入门到精通Java SSO单点登录原理详解

    入门到精通Java SSO单点登录原理详解 Java SSO单点登录(Single Sign-On)是指用户只需在一处进行认证,就能够在所有的关联系统中访问相应的资源。这对于企业内部的多个系统来说是非常实用的,因为用户只需要登录一次就可以跨系统使用资源,提高了用户的使用体验。 单点登录的实现原理 单点登录实现有很多种方案和实现方式,其中比较常见的实现方式是基…

    Java 2023年5月24日
    00
  • 初识通用数据库操作类——前端easyui-datagrid,form(php)

    初识通用数据库操作类是一篇介绍如何使用easyui-datagrid和easyui-form来进行数据库操作的文章,涉及到的技术有PHP、jQuery、easyui等。 准备工作 在使用easyui-datagrid和easyui-form之前,需要先导入相关的js和css文件以及jQuery库。在此基础上,还需要创建数据库和相应的表格。本篇攻略将以mysq…

    Java 2023年6月15日
    00
  • Java的Struts框架中append标签与generator标签的使用

    Java的Struts框架中,append标签和generator标签都是非常重要的标签,用于生成HTML文本。 Append标签的使用 1. 定义 <struts:append> 标签用于将一个值追加到 form、 URL 或链接参数中。 2. 语法 <struts:append name="attr" value=&…

    Java 2023年5月20日
    00
  • 浅谈Java泛型通配符解决了泛型的许多诟病(如不能重载)

    浅谈Java泛型通配符解决了泛型的许多诟病 什么是Java泛型通配符 在Java中,泛型通配符使用?表示,可以理解为一种”我不关心全局,只关心当前”的泛型表示方式,它有效地解决了一些泛型不能重载的问题。 泛型通配符和泛型不能重载问题的关系 当我们想要重载一个泛型方法时,往往会遇到这样的问题:编译器无法区分两个泛型类型参数不同的方法,因为Java编译器使用类型…

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