首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    基础篇:深入解析JAVA泛型

    、类型变量-TypeVariable、基本类型-Class)的共同接口;前两篇反射和注解讲到的ClassT>就是Type的一实现类 ?...称为通配符类型WildcardType GenericArrayType 表示一种元素类型是ParameterizedType(参数化类型)或者TypeVariable(类型变量)的数组类型,如T[]...4 类型擦除 创建泛型的实例时,jvm是会把具体类型擦除的;编译生成的字节码中不包含泛型中的类型参数,即ArrayList和ArrayList都擦除成了ArrayList...无界通配符可以匹配任意类型;但是在使用?时,不能给泛型类的变量设置值,因为我们不知道具体类型是什么;如果强行设置新值,后面的读容易出现ClassCastException错误。...TypeVariable类型数组,即形如:TestT>[][]、T[]等,是GenericArrayType的子接口 public class MainTestT> { T[] param;

    1.4K20

    第12章 元编程与注解、反射第12章 元编程与注解、反射

    虽然两种方法都能用,但大多数方法主要靠其中一种。 注解是把编程中的元数据信息直接写在源代码中,而不是保存在外部文件中。...我们这里给出的示例是用在类上 @Run class SwordTest {} 我们声明的 TestCase 注解,它有个构造函数,传入的参数是一个String类型的id。...使用 ::class 来获取sword对象实例的 KClass 类的引用 val kClass = sword::class 上面的这行代码,Kotlin编译器会自动推断出kClass变量的类型是 val...).getClass() as ClassT> 或者使用KClass实例的 .java 属性 val jkCLass = kClass.java 这个KClassT>.java 的扩展属性的实现源码如下...对象引用 val kClass = container::class // 获取KClass对象 KClass对象的 typeParameters 属性中存有类型参数的信息 val typeParameters

    1K20

    细说java.lang.reflect.Type(ParameterizedType、TypeVariable、WildcardType...)

    (从左到右)依次是:GenericArrayType(数组类型)、ParameterizedType(参数化类型)、WildcardType( 泛型表达式类型)、TypeVariable(类型变量)、Class...~ GenericArrayType(数组类型) 泛型数组,描述的是形如:AT>[]或T[]类型变量和原始类型 public interface GenericArrayType extends Type...( 泛型表达式类型) 通配符表达式,或泛型表达式,它虽然是Type的一个子接口,但并不是Java类型中的一种,表示的仅仅是类似 ?...,指的是ListT>、Map中的T,K,V等值,实际的Java类型是TypeVariableImpl(TypeVariable的子类;此外,还可以对类型变量加上extend限定,这样会有类型变量对应的上限...(Class也是种类的意思,Type是类型的意思) 是为了程序的扩展性,最终引入了Type接口作为Class,ParameterizedType,GenericArrayType,TypeVariable

    3.2K10

    从java的Type到Spring的ResolvableType

    基于这种情况,Java对其进行了抽象,得到了一个新的类型TypeVariable。 TypeVariable 简介 类型变量,或者也可以叫泛型变量。具体就是指我们在申明泛型时定义的T,K,U这种变量。...T,K,U这一类的名称 getAnnotatedBounds(),此方法返回一个AnnotatedType类型的数组,获取的是我们在类型变量的上界。...class java.lang.Object GenericArrayType 简介 GenericArrayType是Type的子接口,用于表示“泛型数组”,描述的是形如:A[]或T[]的类型。...是一个泛型数组 数组的元素类型为:T t2是一个泛型数组 数组的元素类型为:T[] list不是一个泛型数组 stringListArray是一个泛型数组 数组的元素类型为:java.util.List...另外,在上面的例子中,大家可以思考以下几个问题: t1是一个泛型数组,数组的元素类型为:T,那么T是一个什么类型呢? t2是一个泛型数组,数组的元素类型为:T[],那么T[]又是什么类型?

    2.3K40

    泛型,有点难度,会让很多人懵逼,那是因为你没有看这篇文章!

    ,只返回自己内部定义的字段,不包含其父类中的,这点需要注意,和getFields是有区别的。...TypeVariable接口 这个接口表示的是泛型变量,例如:ListT>中的T就是类型变量;而class C1T1,T2,T3>{}表示一个类,这个类中定义了3个泛型变量类型,分别是T1、T2和...GenericArrayType接口 表示的是数组类型,且数组中的元素是ParameterizedType或者TypeVariable。 例如:List[]或者T[]。...//@0 public class C1 {//@1 /** * m1方法参数和返回值都是泛型类型,泛型的实际类型是泛型变量类型T,T是在Demo4中声明的...声明了一个泛型类型的变量T;T是个泛型类型的变量,泛型类型的变量在java中使用TypeVariable来表示。

    99420

    Java基础系列(三十七):泛型继承,通配符,泛型反射

    不能用来匹配。 但是使用 getFirst就不存在这个问题,因为我们无需care它获取到的类型是什么,但一定是 Fruit的子类。...> p) { swapHelper(p);} 在这种情况下, swapHelper方法的参数 T捕获通配符,它不知道是哪种类型的通配符,但是,这是一个明确的类型,并且 T>swapHelper的定义只有在...通配符捕获只有在有许多限制的情况下才是合法的。编译器必须能够确信通配符表达的是单个,确定的类型。例如, ArrayListT>>中的 T永远不能捕获 ArrayList类型声明,使用 java.lang.reflect包中提供的接口 Type,这个接口包含下列子类型: Class类,描述具体类型 TypeVariable接口,描述类型变量(如 TextendsComparable...> t = (TypeVariable<?

    64130

    T::class 和 this::class 的区别

    泛型参数的例子 其实问题是很清楚的,this::class 表示的是对象的类型,而 T::class 则取决于 T 被如何推断。具体用哪个,取决于你的需求。...我们再给大家看个例子: abstract class AT>{ val t: T = ... } A 有个属性是 T 类型的,而这个属性呢,需要在内部初始化。...我们在定协议时要求类型 T 有默认构造方法,以便于我们通过反射实例化它。 我们知道 Kotlin 的泛型也是伪泛型,T 在这里不能直接用于获取其具体的类型,如果我们想要初始化 t,该怎么做呢?...call() as T } } 首先我们拿到 this@A::class,这实际上并不是 A::class,这一点一定要注意,我们这段代码实际上是运行在子类实例化的过程中的,this 是一个子类类型的引用...也正是因为这一点,我们想要获取泛型参数 T 的实参,还需要先拿到 super type 也就是 A 的 KType 实例了。 其次,获取泛型实参,并拿到实参类型的 KClass 实例。

    1.3K30

    我眼中的Java-Type体系(2)1.ParameterizedType2.GenericArrayType3.TypeVariable4.Class5.WildcardType

    )、类型变量(TypeVariable)、基本类型(Class) 进一步说明; 1.ParameterizedType ParameterizedType表示参数化类型,也就是泛型,例如ListT>、...(Map)返回; 我们经常遇到的ListT>,通过getActualTypeArguments()方法,得到的返回值是TypeVariableImpl对象,也就是TypeVariable...值得注意的是,无论是几维数组,getGenericComponentType()方法都只会脱去最右边的[],返回剩下的值; 3.TypeVariable 泛型的类型变量,指的是ListT>、Map中的T,K,V等值,实际的Java类型是TypeVariableImpl(TypeVariable的子类);此外,还可以对类型变量加上extend限定,这样会有类型变量对应的上限; ?...Class 通过上面的例子,可以看出,当我们没有声明泛型的时候,我们普通的对象就是一个Class类型,是Type中的一种; 5.WildcardType ?

    1K70

    【Kotlin】:: 双冒号操作符详解 ( 获取类的引用 | 获取对象类型的引用 | 获取函数的引用 | 获取属性的引用 | Java 中的 Class 与 Kotlin 中的 KClass )

    : 下面的代码中 , 通过 Student::class 获取的 引用对象的类型 是 KClass ; import kotlin.reflect.KClass class Student...属性可以获取类的完整名称 ; kotlin.reflect.KClass 是 Kotlin 语言中的字节码类 , java.lang.Class 是 Java 语言的字节码类 ; 下面是 KClass...* * @param T 类的类型。...与 kotlin.reflect.KClass ---- KClass 是 Kotlin 类的 引用类型 , 是 Kotlin 类的实例对象 , 通过 类名::class 可以获取 KClass 引用..., Class 的全类名是 java.lang.Class ; 与 KClass 相对的是 Java 中的 Class 类 , 是 Java 中的 类的 引用类型 ; 在 Java 语言中 , 需要通过

    4.8K11

    Spring系列第十七讲 深入理解Java注解及Spring对注解的增强(上)

    public,不写默认为public 该元素的类型只能是基本数据类型、String、Class、枚举类型、注解类型(体现了注解的嵌套效果)以及上述类型的一位数组 该元素的名称一般定义为名词,...UseAnnotation7T0是在类上声明的一个泛型类型变量") T0, @Ann7("T1是在类上声明的一个泛型类型变量") T1> { public T2...上面有3个泛型类型变量,我们运行一下看看效果: 类型变量名称:T0 @com.javacode2018.lesson001.demo18.Ann7(value=T0是在类上声明的一个泛型类型变量) 类型变量名称...:T1 @com.javacode2018.lesson001.demo18.Ann7(value=T1是在类上声明的一个泛型类型变量) 类型变量名称:T2 @com.javacode2018.lesson001....demo18.Ann7(value=T2是在方法上声明的泛型类型变量) @Target(ElementType.TYPE_USE) 这个是1.8加上的,能用在任何类型名称上,来个案例感受一下: @Target

    1.2K21

    前端手写一个人工智能回复小助手

    是吧,所以如果我们要实现一个非常聪明的智能是很难的。 不过若干智能助手也是有名的蠢了。 所以,我实现一个蠢但没完全蠢的智能回复应该问题不大。...区分词的类型,如:名词、动词、形容词...等等,然后通过权重将这些词关联起来,最后总结出一个最匹配的回答。 不过实现起来感觉很复杂就放弃了。 ?...image.png 后面就想着,我可以简化这个过程啊,不去区分词的类型,直接就是在所有定义好的句子中取到最匹配的那条。...class Sentence{ // ... // 获取用户发送的语句与定义的句子的匹配程度 match(arr){ // 每次匹配都重置数据 this.typeVariable...class Sentence{ // ... // 获取用户发送的语句与定义的句子的匹配程度 match(arr){ this.typeVariable = {}; let

    50420

    我眼中的Java-Type体系(1)1.ParameterizedType2.TypeVariable3.GenericArrayType4.Class5.WildcardType

    (ParameterizedType)、数组类型(GenericArrayType)、类型变量(TypeVariable)、基本类型(Class); 原始类型,不仅仅包含我们平常所指的类,还包括枚举、数组...、注解等; 参数化类型,就是我们平常所用到的泛型List、Map; 数组类型,并不是我们工作中所使用的数组String[] 、byte[],而是带有泛型的数组,即T[] ; 基本类型,也就是我们所说的java...ParameterizedType源码 2.TypeVariable 类型变量,即泛型中的变量;例如:T、K、V等变量,可以表示任何类;在这需要强调的是,TypeVariable代表着泛型中的变量,而ParameterizedType...TypeVariable源码 3.GenericArrayType 泛型数组类型,用来描述ParameterizedType、TypeVariable类型的数组;即ListT>[] 、T[]等; ?...GenericArrayType源码 4.Class 上三者不同,Class是Type的一个实现类,属于原始类型,是Java反射的基础,对Java类的抽象; 在程序运行期间,每一个类都对应一个Class

    1.2K60
    领券