首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【Kotlin】泛型 ① ( 泛型类 | 泛型参数 | 泛型函数 | 多泛型参数 | 泛型类型约束 )

文章目录 一、泛型类 二、泛型参数 三、泛型函数 四、多泛型参数 五、泛型类型约束 一、泛型类 ---- 定义一个 泛型类 , 将 泛型参数 T 放在 尖括号 中 , 该泛型参数放在 类名后..., 主构造函数之前 , 该泛型参数 T 是 类型占位符 , 在 该泛型类类中 可以使用 类型占位符 T 作为一个类 使用 , 可以 定义 T 类型成员属性 主构造函数中可以接收 T 类型的实例对象作为参数...下面的代码中 , 声明了 Student 泛型类 , 该泛型类 接收 T 类型的泛型参数 , 在主构造函数中接收 T 类型的参数 , 在该泛型类中声明了 T 类型的成员属性 ; class Student..., 需要两个泛型参数来表示其类型 ; T 类型在泛型类中注明 , 可以在该泛型类 Student 中随意使用 , 但是 泛型参数 R 是首次在该函数中使用 , 因此需要在该函数的 fun 关键字...引入了新的泛型类型 , 需要在 class 关键字 和 主构造函数 之前 , 使用 尖括号 注明 ; class Student(_item: T) { } 泛型函数 泛型参数 声明 :

2.9K10

【Kotlin】泛型总结 ★ ( 泛型类 | 泛型参数 | 泛型函数 | 多泛型参数 | 泛型类型约束 | 可变参数结合泛型 | out 协变 | in 逆变 | reified 检查泛型参数类型 )

放在 尖括号 中 , 该泛型参数放在 类名后 , 主构造函数之前 , 该泛型参数 T 是 类型占位符 , 在 该泛型类类中 可以使用 类型占位符 T 作为一个类 使用 , 可以 定义 T 类型成员属性...主构造函数中可以接收 T 类型的实例对象作为参数 , T 类型可以 作为函数的返回值 ; 通常情况下 , 泛型参数 都使用 T 表示 , 使用其它字母 或者 字符串 都可以表示 泛型参数 , 但是 约定俗成...都使用 T 来表示泛型 ; 代码示例 : 下面的代码中 , 声明了 Student 泛型类 , 该泛型类 接收 T 类型的泛型参数 , 在主构造函数中接收 T 类型的参数 , 在该泛型类中声明了 T...引入了新的泛型类型 , 需要在 class 关键字 和 主构造函数 之前 , 使用 尖括号 注明 ; class Student(_item: T) { } 泛型函数 泛型参数 声明 :..., 泛型参数 是 子类 的 泛型类对象 , 不可以赋值 给 泛型参数 是父类 的变量 ; Java 中的泛型对象赋值 , 不存在继承关系 , 是什么类型就是什么类型 , 类型要严格相同 ; import

4.1K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【说站】Java泛型类如何定义

    Java泛型类如何定义 1、说明 (1)泛型类的定义只需在类名后面添加类型参数,当然也可以添加多个参数,如类似、等等。因此,我们可以在类别中使用定义的类型参数。...(2)泛型类最常用的使用场景是元组的使用。我们知道方法return返回值只能返回单个对象。...如果我们定义一个通用类型,定义两个甚至三个类型参数,那么在我们的通用类型中构建这样一个元组数据,并通过泛型传输多个对象,这样我们就可以一次性使用多个数据。...setData(T t) {      this.item=t;     }          public T getData() {      return this.item;     } } 以上就是Java...泛型类定义的方法,希望对大家有所帮助。

    65230

    【C++】泛型编程 ⑦ ( 模板类常用用法 | 模板类声明 | 模板类调用 | 模板类作为函数参数 )

    首先 , 要进行 具体类型 初始化 , 该操作就是在 模板类 后面的 尖括号中 , 注明 泛型类型 ; MyClass 此时 , 注明 泛型类型后 , 就会生成 具体的类 ; 然后 , 使用...具体的类 , 定义 具体的 变量 ; MyClass myInt(10); 3、类模板做函数参数 类模板 作为函数参数 , 形参 必须是具体类型 , 也就是 类模板 的泛型类型必须声注明 ;...下面的 fun 函数中 , 接收模板类作为参数 , 模板类的 泛型类型 需要被注明 ; // 类模板对象作为函数参数 // 形参必须是具体类型 // 类模板的泛型类型必须声注明 void fun(MyClass...这个类可以接受一个类型参数T , 并创建一个具有该类型的成员变量的对象 ; MyClass是一个模板类 , 该模板类 接受一个 泛型类型参数T , 泛型类型参数 T 在类中的许多地方都会用到 , 在类体中定义了一个...T 类型的成员变量 value , 以及一个接受T类型参数的构造函数 , 在printValue函数中 , 打印 value 的值 ; template 是模板声明 , 告诉编译器我们将在后面定义一个类模板

    51340

    【C++】泛型编程 ⑦ ( 类模板常用用法 | 类模板声明 | 类模板调用 | 类模板作为函数参数 )

    首先 , 要进行 具体类型 初始化 , 该操作就是在 模板类 后面的 尖括号中 , 注明 泛型类型 ; MyClass 此时 , 注明 泛型类型后 , 就会生成 具体的类 ; 然后 , 使用...具体的类 , 定义 具体的 变量 ; MyClass myInt(10); 3、类模板做函数参数 类模板 作为函数参数 , 形参 必须是具体类型 , 也就是 类模板 的泛型类型必须声注明 ;...下面的 fun 函数中 , 接收模板类作为参数 , 模板类的 泛型类型 需要被注明 ; // 类模板对象作为函数参数 // 形参必须是具体类型 // 类模板的泛型类型必须声注明 void fun(MyClass...这个类可以接受一个类型参数T , 并创建一个具有该类型的成员变量的对象 ; MyClass是一个模板类 , 该模板类 接受一个 泛型类型参数T , 泛型类型参数 T 在类中的许多地方都会用到 , 在类体中定义了一个...T 类型的成员变量 value , 以及一个接受T类型参数的构造函数 , 在printValue函数中 , 打印 value 的值 ; template 是模板声明 , 告诉编译器我们将在后面定义一个类模板

    8000

    【C++】泛型编程 ⑧ ( 类模板继承语法 | 普通类 继承 类模板语法 | 类模板 继承 类模板语法 | 继承类模板必须指定具体的类型参数列表 | 继承 类模板 必须重写构造函数 )

    的 子类 : // 类模板 继承时 , 需要具体化 类模板 // 也就是 指定 类模板 的 类型参数列表 , 将 泛型类型 固定下来 // C++ 编译器 只有知道了具体类型 , 才能知道 父类占用内存大小..., 类模板子类 与 普通类子类 区别就是 , 类模板子类 需要在尖括号中指定 具体的 类型参数列表 的 数据类型 ; 此时 , 在继承时 , 被继承的 类模板 必须 声明 类型参数列表 , 将具体的泛型类型写在尖括号中..., 调用 类模板 具体类 的构造函数 , 如果 子类 继承 类模板父类 , 如果 子类没有实现 构造函数 , // 类模板 继承时 , 需要具体化 类模板 // 也就是 指定 类模板 的 类型参数列表...Father 类模板 继承 类模板 时 , 也需要 指定 父类类模板 的具体 泛型类型 , 只是这个泛型类型可以是 另外一个泛型 T ; 下面的代码 是 类模板 继承 类模板的 代码 , Son2...中的 泛型 T , 与 Father 中的 T 没有任何关系 , 也就是说 Son2 中的 泛型类型 T 相当于 普通类 继承 类模板 中的 具体类型 int , Father 类中的 泛型 T 已经被覆盖掉了

    1.1K31

    【C++】泛型编程 ⑬ ( 类模板示例 - 数组类模板 | 构造函数和析构函数 的 声明与实现 | 普通成员函数 的 声明与实现 | 外部友元函数 的 声明与实现 )

    内部定义 , 类模板内部定义的 操作符重载函数 , 其 左操作数 必须是 类本身 ; 外部友元函数 的 声明 : 声明时 , 需要在 函数名 和 参数列表之间 注明 泛型类型 ; 实现时 , 不能在...和 参数列表之间 注明 泛型类型 // 实现时 , 不能在 函数名 和 参数列表之间 注明 泛型类型 friend ostream& operator (ostream..., 在 函数参数 / 返回值 类型 是 数组类型时 , 需要添加 类型标识 ; 声明时 , 需要在 函数名 和 参数列表之间 注明 泛型类型 ; 实现时 , 不能在 函数名 和 参数列表之间...注明 泛型类型 ; // 左移 << 操作符重载 // 注意 声明时 , 需要在 函数名 和 参数列表之间 注明 泛型类型 // 实现时 , 不能在 函数名 和 参数列表之间 注明...和 参数列表之间 注明 泛型类型 // 实现时 , 不能在 函数名 和 参数列表之间 注明 泛型类型 friend ostream& operator (ostream

    52010

    java基础学习_集合类02_List的子类、泛型、增强for循环、静态导入、可变参数_day16总结

    (3)Vector类   (4)LinkedList类   (5)案例 2:泛型(掌握)   (1)泛型的概述   (2)泛型的格式   (3)泛型的好处   (4)泛型的前世今生   ...B:泛型类       把泛型定义在类上         格式:public class 类名泛型类型1, 泛型类型2, ...> 注意:泛型类型必须是引用数据类型。...C:泛型方法       把泛型定义在方法上         格式:public 泛型类型> 返回类型 方法名(泛型类型 泛型名) 注意:方法能接收任意类型的参数         ...D:泛型接口       把泛型定义在接口上         格式:public interface 接口名泛型类型1, 泛型类型2, ...> 注意:把泛型定义在接口上,该接口的实现类是实现的那一刻就知道类型的...E:泛型高级通配符       ?       任意类型,如果没有明确,那么就是Object以及任意的Java类了(泛型如果明确地写的时候,前后必须一致)       ?

    1.1K10

    BATJ面试必会之常见Java基础面试题(附答案)

    因为你不可以创建抽象类的实例,所以构造函数只能通过构造函数链调用(Java中构造函数链指的是从其他构造函数调用一个构造函数),例如,当你创建具体的实现类。...另外,即使你没有提供任何构造函数,编译器将为抽象类添加默认的无参数的构造函数,没有的话你的子类将无法编译,因为在任何构造函数中的第一条语句隐式调用super(),Java中默认超类的构造函数。...(5)如何编写一个泛型方法,让它能接受泛型参数并返回泛型类型? 编写泛型方法并不困难,你需要用泛型类型来替代原始类型,比如使用T, E or K,V等被广泛认可的类型占位符。...); } (6)Java中如何使用泛型编写带有参数的类?...) (4) 父类构造函数 (5) 子类非静态代码块 ( 包括非静态初始化块,非静态属性 ) (6) 子类构造函数 1.34 什么是字符集和编码?

    89620

    Java 中文官方教程 2022 版(六)

    7 及更高版本中,只要编译器可以从上下文中确定或推断出类型参数,就可以用空类型参数集()替换调用泛型类构造函数所需的类型参数。...()替换调用泛型类构造函数所需的类型参数。...> myMap = new HashMap(); // unchecked conversion warning 泛型和非泛型类的泛型构造函数的类型推断 请注意,构造函数可以是泛型的(换句话说...请注意,这个泛型类的构造函数包含一个形式类型参数T。编译器为这个泛型类的构造函数的形式类型参数T推断了类型String(因为这个构造函数的实际参数是一个String对象)。...Java SE 7 之前的编译器能够推断泛型构造函数的实际类型参数,类似于泛型方法。然而,在 Java SE 7 及更高版本中,如果使用菱形(),编译器可以推断正在实例化的泛型类的实际类型参数。

    20000

    如何使用 Java 泛型来避免 ClassCastException

    如何使用 Java 泛型来避免 ClassCastException 泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用。 一句话解释什么是泛型?...深入探索泛型类 泛型的概念 泛型是通过类型参数引入一组类型的类或接口. 类型参数:是一对尖括号之间以逗号分隔的类型参数名列表。 一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。...这意味着在方法调用期间必须传递相同的实际类型参数,编译器自动通过调用来推断这个参数的类型是什么 泛型和类型推断 Java 编译器包含类型推断算法,用于在实例化泛型类、调用类的泛型构造函数或调用泛型方法时识别实际的类型参数...泛型类实例化 在 Java SE 7之前,在实例化泛型类时,必须为变量的泛型类型和构造函数指定相同的实际类型参数。...泛型构造函数 泛型类和非泛型类都可以声明泛型构造函数,其中构造函数具有形式类型参数列表。

    2.2K40

    关于对Java泛型的解释和思考

    翻译过来就是一句话,即可以理解为泛型就是 参数化 参数类型。 1. 泛型的作用 Java 5中添加了泛型,使开发者在使用集合类时提供编译时类型检查并消除ClassCastException异常。...集合框架使用泛型来保证类型安全。下面举个例子,看看泛型如何帮助我们安全地使用集合类。...泛型有三种使用方式,分别为:泛型类、泛型接口、泛型方法 2.泛型类 泛型类型用于类的定义中,被称为泛型类。泛型类是在类型上参数化的类或接口。我们使用尖括号 来指定类型参数。...泛型方法 有时我们不希望整个类都被参数化,在这种情况下,我们可以创建 Java 泛型方法。由于构造函数是一种特殊的方法,我们也可以在构造函数中使用泛型类型。...有界类型参数可以与方法以及类和接口一起使用。 Java 泛型也支持多个边界,即。在这种情况下,A 可以是接口或类。

    62520

    Java 编程技巧之数据结构

    而在 Java 语言中,也有一个类似的功能叫泛型(generic)。在编写类和方法的时候,一般使用的是具体的类型,而用泛型可以使类型参数化,这样就可以编写更通用的代码。...泛型类 以支撑类为例,定义泛型的通用支撑类: /** 通用支撑类 */ @Getter @Setter @ToString public class GenericHolder { /**...(holder.getValue()); } 泛型上下界 在使用泛型的时候,我们还可以为传入的泛型类型实参进行上下界的限制,如:类型实参只准传入某种类型的父类或某种类型的子类。...泛型上下界的声明,必须与泛型的声明放在一起 。 上界通配符(extends): 上界通配符为 ”extends ”,可以接受其指定类型或其子类作为泛参。...下界通配符(super): 下界通配符为”super”,可以接受其指定类型或其父类作为泛参。例如:List<?

    1.8K10

    Java 编程技巧之数据结构

    而在 Java 语言中,也有一个类似的功能叫泛型(generic)。在编写类和方法的时候,一般使用的是具体的类型,而用泛型可以使类型参数化,这样就可以编写更通用的代码。...泛型类 以支撑类为例,定义泛型的通用支撑类: /** 通用支撑类 */ @Getter @Setter @ToString public class GenericHolder { /**...(holder.getValue()); } 泛型上下界 在使用泛型的时候,我们还可以为传入的泛型类型实参进行上下界的限制,如:类型实参只准传入某种类型的父类或某种类型的子类。...泛型上下界的声明,必须与泛型的声明放在一起 。 上界通配符(extends): 上界通配符为 ”extends ”,可以接受其指定类型或其子类作为泛参。...下界通配符(super): 下界通配符为”super”,可以接受其指定类型或其父类作为泛参。例如:List<?

    1.2K10

    看完这篇Java基础,你也是天花板

    基本上代码块分为三种:Static静态代码块、构造代码块、普通代码块 代码块执行顺序:静态代码块——> 构造代码块 ——> 构造函数——> 普通代码块 继承中代码块执行顺序:父类静态块——>子类静态块—...—>父类代码块——>父类构造器——>子类代码块——>子类构造器 泛型 泛”就是宽泛,泛指的意思,所谓泛型就是不指定具体类型,而是作为参数传递。...看一些创建时的提示,:类型参数是用来表示自定义标识符,用来传递数据的类型。 泛型的优点: 使用泛型类时指明了数据类型,赋给其他类型的值会抛出异常,既不需要向下转型,也没有潜在的风险。...除了定义泛型类,还可以定义泛型接口和泛型方法,使用泛型方法时不必指明参数类型,编译器会根据传递的参数自动查找出具体的类型。...在编译阶段,所有泛型类的类型参数都会被Object或者它们的限定边界来替换。(类型擦除) 在继承泛型类型的时候,桥方法的合成是为了避免类型变量擦除所带来的多态灾难。

    44511

    反射反射 程序员的快乐

    paramNames[j] = ms[j].getName(); } } } } 通过反射可以获取任何类的类信息 比较牛逼 获取类的成员变量构造函数信息 成员变量也是对象 是Java.lang.reflect.Field...是Java.lang.Constructor的对象 其中封装了构造函数的信息 栗子:通过反射可以获取到任何类的信息 需求:打印类的信息,获取类的构造函数信息 package cn.reflect; import...String name = constructor.getName(); // 获取构造函数的参数列表------>得到的是参数列表的类类型 Class[] parameterTypes...* * 说明编译之后集合的泛型是去泛型化的(编译完之后就没有泛型存在了) * * java中集合的泛型,是防止错误输入的,只在编译阶段有效,绕过编译就无效了 *...String类型 * * 使用for增强遍历内部其实做出的操作是:集合的每个值都使用一个集合泛型类型的数据类型来接受遍历 * 而int类型使用String类型来接受,众所周知将会报错

    94040

    关于Java中泛型、反射和注解的扫盲篇

    泛型:一般用在类、方法、接口中,叫做泛型类、泛型接口、泛型方法 泛型的使用 package demo.generic; import lombok.Data; /** * 泛型类的定义...,普通方法的参数也为泛型 public T handleSomething(T target) { return target; } } 泛型的参数不支持基本类型...反射的主要用法 如何获取类的构造方法并使用 在我们上面自定义的ReflectTarget类中创建各种类型的构造函数,用于测试 // --------构造函数-------- // 访问修饰符为默认的构造函数...; } //有一个参数的构造函数 public ReflectTarget(char name) { System.out.println("调用了带有一个参数构造函数,参数为:" +...name); } //有多个参数的构造函数 public ReflectTarget(String name,int index) { System.out.println("调用了有多个参数构造函数

    20710

    Java之泛型:解读类型安全的利器

    Java泛型的定义采用尖括号“”将类型参数括在一起,如下所示:class ClassName { // ...}其中,T为类型参数,可以是任意非关键字的标识符。...它表示该类可以接受任意类型的参数。在类的定义中,可以使用 T 作为类型参数定义类中的各种成员变量、方法或构造函数等。在实例化该泛型类时,会指定实际的类型参数来替换 T。...这意味着在该实例中,可以使用 String 类型的成员变量、方法或构造函数等。除了类型参数,还有通配符类型参数?,可以用来表示不确定的类型。...类代码方法介绍泛型类在Java中,泛型类用来替代具体的数据类型。...这段代码演示了如何使用泛型类Pair及其静态方法getMax来实现获取列表中最大值的功能。

    20571

    游刃有余:玩转Java泛型

    以下是 Java 中与泛型相关的一些关键概念: 类型参数:泛型使用类型参数,这些参数是使用泛型类、接口或方法时指定的类型的占位符。类型参数括在尖括号( 符号)中,并且可以随意命名。...泛型类和接口:可以通过在其声明中包含类型参数来定义泛型类或接口。然后,这些参数可以用作类或接口中的字段类型、方法参数和返回类型。创建泛型类或接口的实例时,将提供类型参数来指定所使用的实际类型。...泛型方法:除了泛型类和接口之外,Java 还支持泛型方法。这些方法有自己的类型参数,可用于指定其参数的类型并独立于封闭类或接口返回值。...这些示例演示了 Java 中泛型的多功能性,允许您以泛型和类型安全的方式处理不同的类型。 Java 泛型中的通配符 Java泛型中的通配符提供了一种指定未知类型或一系列类型的方法。...:Java 泛型中的无界通配符,仅用问号表示?,通过接受任何类型来实现最大的灵活性。当你想要使用泛型类、接口或方法而不指定任何类型限制时,它非常有用。

    15910
    领券