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

如何告诉Kotlin星形投影表示相同的类型参数

Kotlin中的星形投影是一种特殊的语法,用于表示相同的类型参数。它可以在某些情况下简化代码,并且在处理泛型类型时非常有用。

在Kotlin中,泛型类型参数可以使用星形投影来表示相同的类型参数。星形投影使用星号(*)来代替具体的类型参数。它可以用于以下三种情况:

  1. 未知类型参数:当你不关心具体的类型参数时,可以使用星形投影来表示未知类型。这在某些情况下可以简化代码,例如在使用Java的原生泛型类型时。
  2. 未知类型参数的上界限定:当你只关心类型参数的上界限定时,可以使用星形投影来表示未知类型参数的上界。这在某些情况下可以简化代码,并且避免了需要指定具体类型参数的麻烦。
  3. 未知类型参数的下界限定:Kotlin中的星形投影不支持表示未知类型参数的下界限定。

需要注意的是,星形投影只能用于不涉及具体类型参数的情况下。如果需要在代码中使用具体的类型参数,仍然需要指定具体的类型。

以下是一些使用星形投影的示例:

  1. 未知类型参数示例:
代码语言:txt
复制
// 使用Java的原生泛型类型
val list: List<*> = listOf(1, "two", 3.0)
for (item in list) {
    println(item)
}
  1. 未知类型参数的上界限定示例:
代码语言:txt
复制
// 使用星形投影表示未知类型参数的上界限定
fun printItems(list: List<out Any>) {
    for (item in list) {
        println(item)
    }
}

val list: List<*> = listOf(1, "two", 3.0)
printItems(list)

在上述示例中,我们使用星形投影来表示未知类型参数,并将其作为参数传递给printItems函数。函数中的类型参数上界限定为Any,表示可以接受任何类型的列表。

总结起来,星形投影是Kotlin中用于表示相同类型参数的一种特殊语法。它可以在某些情况下简化代码,并且在处理泛型类型时非常有用。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Kotlin 范型之泛型约束、类型投影、星号投影

是 Any 类型,所以 Kotlin 默认上界是Any? 1.2 where 关键字 当一个类型参数指定多个约束时,在 Java 中使用&连接多个类、接口。...而使用 in 时,编译可以通过,因为该参数只能出现在方法入参。 此时,list2 和 list3 分别表示一个受限制 MutableList。在 Kotlin 中,这种行为被称之为类型投影。...三.星号投影(Star-projections) 星号投影用来表明“不知道关于泛型实参任何信息”。 类似于 Java 中无界类型通配符?, Kotlin 使用星号投影*。...*代指了所有类型,相当于Any?。 例如:MutableList 表示是 MutableList<out Any?...因此,星号投影不能写入,只能读取。 四.总结 本文是 Kotlin 范型系列最后一篇文章。 本文讲述了 Kotlin 泛型约束、类型投影、星号投影特性。

2.5K20

Kotlin学习笔记(七)-泛型

其实Kotlin泛型和Java很相似。他们都是伪泛型,所谓伪泛型就是我们们是无法获取到泛型具体类型。以为Java存在类型擦除和转换。...Kotlin协变与逆变 泛型参数即可作为传入参数,也可以作为返回值,但被in和out关键字修饰后就不一样了 out 叫协变 只能作为返回值读取 不能写入和修改(Kotlinlist中只有get方法...) 代码示例: 协变 :泛型类型与实参类型继承关系相同 val listOf: List = listOf(1, 2, 3) 在泛型参数前面加上out表示协变,作为返回值...fun compareTo(other: Any): Int { return 0 } } 在泛型参数前面加上in表示逆变,作为传入参数,为只写类型,...(目的是兼容1.5) Kotlin不可以 定义了泛型了 创建时候就必须指定泛型 星投影只能只能作为形参,不能作为实参。

65320
  • Kotlin基础之泛型

    Kotlin没有任何通配符类型,它使用声明处变型和类型投影两种方式替代。 通配符 - 使用问号表示类型参数表示未知类型类型约束方法。 首先,先思考为什么Java需要这些难以理解通配符。...T声明为out时,表示T只能出现在C成员输出位置,作为交换,C是C类型安全超类。...除了out,kotlin提供了一个补充变型注解:in。让类型参数变为逆变量:只能消费,从不生产。Comparable就是协变量一个很好例子。...} 类型投影 使用处变型:类型投影 声明类型参数T为out很方便,避免在使用处子类型化。...此时安全地定义投影泛型,每个泛型具体实例都是泛型类型。 为此,Kotlin提供称为星号投影语法。 对于Foo,T为带有上界TUpper协变量,Foo等价于Foo。

    96370

    Kotlin | 9. 泛型

    // 代码清单9.16 带 out 投影类型参数数据拷贝函数 // 可以给类型用法加上 out 关键字:没有使用那些 T 用在 in 位置方法...不要为使用投影类型后不能调用某些方法而吃惊 val list: kotlin.collections.MutableList = mutableListOf(1,...2, 3) // list.add(42) // 代码清单9.17 带 in 投影类型参数数据拷贝函数 // 允许目标元素类型是来源元素类型类型...变型是一种说明两种拥有相同基础类型和不同类型参数泛型类型之间子类型化关系方式,它说明了如果其中一个泛型类型类型参数是另一个类型参数类型 这个泛型类型就是另外一个泛型类型类型或者超类型。...在Kotlin 中既可以为整个泛型类指定变型(声明点变型),也可以为泛型类型特定使用指定变型(使用点变型)。 当确切类型实参是未知或者不重要时候,可以使用星号投影语法。

    1.8K10

    Spring中国教育管理中心-Apache Cassandra Spring 数据教程十一

    所有这些机制都会在某种程度上产生冲突,因为属性共享相同名称,但可能代表两个不同值。如果类型不可分配,Spring Data 会跳过超类型属性。...从编程模型角度来看,需要考虑以下几点: 应该保留哪个属性(默认为所有声明属性)?您可以通过使用 注释这些属性来排除属性@Transient。 如何表示数据存储中属性?...当 Spring Data 检测到具有参数默认值构造函数时,如果数据存储不提供值(或简单地返回null),它就会使这些参数不存在,因此 Kotlin 可以应用参数默认值。...从编程模型角度来看,需要考虑以下几点: 应该保留哪个属性(默认为所有声明属性)?您可以通过使用 注释这些属性来排除属性@Transient。 如何表示数据存储中属性?...14.2.数据映射和类型转换 本节解释了类型如何映射到 Apache Cassandra 表示和从 Apache Cassandra 表示映射。

    1.6K20

    深入理解Kotlin泛型系统

    Kotlin 中,针对于这两种情况给了另外两个关键字:需要读取带泛型对象值时,使用 out 来标记类型参数;需要传入类型参数类型作为形参时,使用 in。...在 Kotlin 中,被 out 标记类型参数类型称之为协变类型,它代表当 A 是 B 子类时,C 也能作为 C 子类使用;而被 in 标记类型参数类型则相反,它代表当 A 是 B子类时,C...从方法参数使用上来说,Kotlin 和 Java 似乎没有什么不同,而不同地方在于 Kotlin 可以将这种定义作用在类型定义上,官方称之为声明点变型;与之相对应,像 Java 这种在方法参数上定义被称为使用点变型...「*」投影 因为 Kotlin 源码中不允许忽略泛型参数,所以在一些泛型不重要地方,就不可避免使用 来表示。...泛型注意点: 在java编程中类型系统最棘手一部分是通配符类型。但是,在Kotlin编程中,是没有通配符,采用声明变化和类型投影来替代。 通配符作用: 使用界限通配符增加API灵活性。

    1.1K10

    Jetpack之Room使用,结合Flow

    包含具有 0 个参数且返回使用@Dao注释抽象方法。...Entity:表示数据库中表。 DAO:包含用于访问数据库方法。 应用使用 Room 数据库来获取与该数据库关联数据访问对象 (DAO)。...只要是数据库中任意一个数据有更新,无论是哪一行数据更改,那就重新执行 query操作并再次派发Flow。 同样道理,如果一个不相关数据更新时,Flow也会被派发,会收到与之前相同数据。...Room通过Migration类来执行升级操作,我们只要告诉Migration类改了什么就行,比如新增字段或表。...room.expandProjection:配置 Room 以重写查询,使其顶部星形投影在展开后仅包含 DAO 方法返回类型中定义列。 android { ...

    1.1K20

    Kotlin互操作——Kotlin与Java互相调用

    和setter方法(名称以get开头参数方法和以set开头参数方法)在Kotlin表示为属性。...② 空安全类型 Kotlin空安全类型原理是,Kotlin在编译过程中会增加一个函数调用,对参数类型或者返回类型进行控制,开发者可以在开发时通过注解@Nullable和@NotNull方式来弥补Java...这使得执行is检查不可能照顾到泛型,Kotlin只允许is检查星投影泛型类型。...这意味着Kotlin函数字面值可以被自动转换成只有一个非默认方法Java接口实现,只要这个方法参数类型能够与这个Kotlin函数参数类型相匹配就行。...: jqiang.Mutual.Kotlin.example.bar(); 在多个文件中生成相同Java类名(包名相同并且类名相同或者有相同@JvmName注解)通常是错误

    3.8K10

    kotlin修炼指南7之泛型

    泛型是面向对象编程一个非常重要方面,它出现,是多态核心实现,简单说,就是可以在不同对象类型之间,使用相同代码逻辑,从而实现复用。...❝不管是如何型变,它们作用都是扩大泛型参数类型范围。 ❞ 协变 泛型协变,是泛型型变一种方式。 协变使用很简单,我们给参数加上out前缀即可,代码如下。...星型投影 星型投影,其实就是Java中「?」通配符,用于在泛型使用中,去除泛型依赖,这么说有点抽象,简单说,就是当你不关心具体泛型类型时,就可以使用「?」或者「*」来忽略泛型约束。...,因为我不关心泛型类型,不过要注意是,星型投影之后返回类型,就成了「Any?」...❝但是我们依然可以使用协变来限制投影上限,当我们加上上限后,就可以限制返回数据上限类型了——out T : CommonPush ❞ 实际使用 我们在设计泛型API时,通常会有两种使用方式,一种是将泛型作为参数

    63630

    Spring认证中国教育管理中心-Spring Data R2DBC框架教程六

    当 Spring Data 检测到具有参数默认值构造函数时,如果数据存储不提供值(或简单地返回null),它就会使这些参数不存在,因此 Kotlin 可以应用参数默认值。...从编程模型角度来看,需要考虑以下几点: 应该保留哪个属性(默认为所有声明属性)?您可以通过使用 注释这些属性来排除属性@Transient。 如何表示数据存储中属性?...16.4.1.默认类型映射 下表解释了实体属性类型如何影响映射: 列本机数据类型取决于 R2DBC 驱动程序类型映射。驱动程序可以提供额外简单类型,例如几何类型。...自定义顶级实体转换需要非对称类型进行转换。入站数据是从 R2DBC Row. 出站数据(与INSERT/UPDATE语句一起使用)被表示为OutboundRow然后被组装成一个语句。...此外,您需要在驱动程序级别配置枚举类型,以便驱动程序知道如何表示枚举类型

    2.1K20

    Spring认证中国教育管理中心-Spring Data MongoDB教程十三

    当 Spring Data 检测到具有参数默认值构造函数时,如果数据存储不提供值(或简单地返回null),它就会使这些参数不存在,因此 Kotlin 可以应用参数默认值。...从编程模型角度来看,需要考虑以下几点: 应该保留哪个属性(默认为所有声明属性)?您可以通过使用 注释这些属性来排除属性@Transient。 如何表示数据存储中属性?...18.3.数据映射和类型转换 本节解释了类型如何映射到 MongoDB 表示和从 MongoDB 表示映射。...Spring Data MongoDB 支持所有可以表示为 BSON(MongoDB 内部文档格式)类型。...@Field:应用于字段级别,它允许描述字段名称和类型,因为它将在 MongoDB BSON 文档中表示,从而允许名称和类型与类字段名称以及属性类型不同。

    2.8K20

    Kotlin Contract

    Kotlin 智能推断是其语言一大特色。 智能推断,能够根据类型检测自动转换类型。 但是,智能推断并没有想象中强大,例如下面的代码就无法进行推断,导致编译失败: fun String?....Contract 正是通过这种声明函数调用结果与所传参数值之间关系来改进 Kotlin 智能推断效果。...2.2 CallInPlace Contracts 前面Kotlin 如何优雅地使用 Scope Functions曾介绍过 Scope Function,我们来回顾一下 let 函数源码: @kotlin.internal.InlineOnly...每当调用一个函数时,它所有效果都会被激发。编译器将收集所有激发效果以便于其分析。 目前 Kotlin 只支持有 4 种 Effect: Returns: 表示函数成功返回,不会不引发异常。...CallsInPlace:表示对传递 lambda 参数调用位置和调用次数约束。 四. 小结 Contract 是帮助编译器分析一个很好工具,它们对于编写更干净、更好代码非常有帮助。

    77031

    Kotlin热身篇: 简介与基本用法

    二. kotlin 和 java8 相同kotlin 和 java8 相同点我总结了三个,第一个是: 它们都是面向对象和函数式编程语言,第二个是: 它们都是强类型静态语言,最后一个就是它们都符合...Kotlin 基础语法 5.1 kotlin 方法 5.1.1 kotlin 方法声明 Kotlin 定义方式比较简单,括号中是参数,格式: "函数名(参数名称: 参数): 返回类型",返回类型定义在括号外...告诉编译器它不为空 n!!....中缀表达式 kotlin 中缀表达式只有一个参数,且用 infix 修饰函数,这就是我们所说自定义运算符中缀表达式,详细代码如下: // 书 class Book{ // 传入任意类型,返回一个...表示可空类型与非空类型,Kotlin 类型系统旨在消除来自代码空引用危险,详细代码如下: foo? var foo?

    1.6K30

    Spring认证中国教育管理中心-Spring Data R2DBC框架教程三

    将 SpEL 表达式与普通参数结合使用时,请使用命名参数表示法而不是本机绑定标记,以确保正确绑定顺序。...由 SpEL 表达式评估支持方法也可以使用方法参数,然后可以从表达式中引用这些参数。方法参数可通过Object名为数组获得args。以下示例显示了如何从args数组中获取方法参数: 示例 71....使用可为空包装器投影接口 interface NamesOnly { Optional getFirstname(); } 如果基础投影值不是null,则使用包装器类型的当前表示返回值...如果支持值是null,则 getter 方法返回所用包装器类型表示。 基于类预测 (DTO) 定义投影另一种方法是使用值类型 DTO(数据传输对象),这些 DTO 包含应该检索字段属性。...这些 DTO 类型使用方式与使用投影接口方式完全相同,只是不发生代理并且不可以应用嵌套投影。 如果存储通过限制要加载字段来优化查询执行,则要加载字段由公开构造函数参数名称确定。

    2.3K30

    是时候使用Kotlin编程了

    Kotlin如何兼容Java 都是Kotlin可以100%兼容Java,那么Kotlin又是如何兼容Java呢?下面是Kotlin一个编译流程图。...同时Kotlin支持在函数定义时候声明参数默认值,例如: 函数调用时候可以直接调用,也可以使用命名参数,例如: 3,类声明 类名冒号表示继承,所有类基类称为Any...例如: 调用高阶函数方式如下: 当然,我们也可以声明一个局部函数,然后把他作为参数传递给另一个函数,还可以使用Lambda表达式来表示函数参数。...7.2 密封类 7.3 小结 第8章 集合与泛型 8.1集合 8.1.1 集 8.1.2 列表 8.1.3 映射 8.2 泛型 8.2.1 泛型基础 8.2.2 型变 8.2.3 声明处型变 8.2.4 类型投影...函数基本用法 10.1.2 中缀表示法 10.1.3 函数参数 10.1.4 函数作用域 10.1.5 函数返回值 10.1.6 尾递归函数 11.2 高阶函数 11.2.1 高阶函数基本用法 11.2.2

    3.2K10

    介绍Kotlin第一部分(翻译篇)

    如何做到这一点以及了解更多信息,可以从官方文档Kotlin中找到关于 Maven /Gradle更多介绍。...fun returnIt2 (turntable: String) = turntable 类型声明遵循相同模式在这里-它排在后面。...正如你所看到,在表达式返回类型上是可选。可以省略或者留在原位,什么让你更方便(经验法则:长表达式,把它放在后面。短表达式,它可以省略)。 Kotlin还引入了可选命名函数参数概念。...这是很有用,特别是如果你函数成长为很多同类型和多种不同参数时候。...在这个代码块中,我们使用默认值来定义我们函数参数。当我们这么写时候,我们可以直接调用该函数0个、1个或者多个它参数。 ③ 类,接口和对象 与Java一样,Kotlin也具有类和接口。

    65740
    领券