Java中泛型的简单源码使用,<T> T、 T、<T>的用法,它们之间有何区别,<T> T与T的使用方法详解(保姆级教程)

一、 前置知识:

T 在 Java 泛型中,被称作类型变量。那什么又是类型变量?

类型变量:在整个类的定义中用于指定方法的返回类型,同时也可以指定属性和局部变量的类型。可以用具体的类型来替换类型变量来实例化泛型类型。

如果经常看源码,就能看到很多类似于 T 这种类型变量,简单介绍一下这些类型变量分别代表什么含义。(其实用什么字母表示都可以,这里只是讲解通用的字母表示)

字母通常在哪些位置使用(含义)
T、U、S任意类型
K键类型
V值类型
E集合元素类型
N数字类型

二、<T> T/ T/<T>的区别:

首先展示代码示例:

public class Test {
    public static void main(String[] args) {
        //注意:这里不能是基本数据类型,否则后期调方法传具体类型时报错
        Double[] num = {1.1,2.2,3.3};
        String[] str = {"hello","word"};

        Test01 test01 = new Test01();
        test01.one(num);
        test01.one(str);

        Test02 test02 = new Test02();
        test02.two(num);
        test02.two(str);

        Test03 test03 = new Test03();
        test03.three(num);
        test03.three(str);
    }
}

class Test01 {
    public <T> T one(T[] arr) {
        return arr[1];
    }
}

class Test02 {
    public T two(T[] arr) {
        return arr[1];
    }
}

class Test03 {
    public <T> void three(T[] arr) {
        T t = arr[1];
    }
}

先看:Test01类编写的方法的返回值样式为 <T> T,Test02类编写的方法返回值的样式为 T

① Test02报错:

注意:如果方法的返回值写成 T,那必须为泛型(也就是改成 Test02<T>,否则报错)

在这里插入图片描述

再说下 Test03:public <T> 中的这个 T 是修饰符(标识)的功能,代表这是个泛型方法。并不是返回值类型,而是表示这里传入的参数是泛型 或者 下面定义的变量是泛型。(说简单点:<T>就是确保参数中可以出现 T 这种数据类型或者 方法中定义的变量可以是 T 这种数据类型)

总结:

  • <T> T <T> 就是标识,也就是修饰 T,表明后期传入的 T 不固定。
  • T:就是简单的泛型,按照泛型的基本功能使用即可。但需要注意类后面有时候要加<T>
  • <T>:就是标识、修饰的功能
  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在Spring Data Redis,StringRedisTemplate是一个用于操作Redis的模板类,它提供了一些方便的方法来操作Redis的各种数据结构。其,opsForHash方法返回的是一个HashOperations<String, String, String>类型的对象,这个对象可以用来对Redis的hash类型进行操作。 在默认情况下,StringRedisTemplate使用的序列化器是StringRedisSerializer,这个序列化器将所有的键和值都转换成了字符串类型。因此,HashOperations<String, String, String>表示的是一个键和值都是字符串类型的哈希表。 具体来说,在StringRedisTemplate,opsForHash方法的实现如下: ```java @Override public HashOperations<String, Object, Object> opsForHash() { return new DefaultHashOperations<>(this); } ``` 可以看到,opsForHash方法返回的是一个DefaultHashOperations对象,它实现了HashOperations接口,并且接受一个StringRedisTemplate对象作为参数。 DefaultHashOperations类的泛型定义如下: ```java public class DefaultHashOperations<K, HK, HV> extends AbstractOperations<K, Object> implements HashOperations<K, HK, HV> { // ... } ``` 可以看到,DefaultHashOperations类有三个泛型参数:K、HK和HV。其,K表示哈希表的键的类型,HK表示哈希表hash key的类型,HV表示哈希表hash value的类型。 在StringRedisTemplate,K被固定为String类型(因为StringRedisTemplate是用于操作Redis的字符串类型的模板类),而HK和HV都被固定为String类型(因为StringRedisSerializer将所有的键和值都转换成了字符串类型)。因此,DefaultHashOperations类的泛型参数就变成了<String, String, String>,表示操作的是一个键和值都是字符串类型的哈希表。 总之,StringRedisTemplate的opsForHash方法返回的DefaultHashOperations对象的泛型被限制为<String, String, String>,是因为它是用于操作Redis字符串类型的哈希表的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小学鸡!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值