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

不允许对超类型Kotlin的直接参数进行投影

是指在Kotlin编程语言中,对于超类型(即带有类型参数的父类)的直接参数,不允许进行投影操作。

投影是指在使用带有类型参数的类或接口时,可以选择性地忽略或限制类型参数的具体类型。在Kotlin中,对于带有类型参数的类或接口,可以使用星号(*)来进行投影操作。

然而,对于超类型的直接参数,即在声明超类型时指定的类型参数,Kotlin不允许进行投影操作。这是因为超类型的直接参数在使用时必须具体指定类型,而不能进行模糊或忽略处理。

这种限制的目的是为了确保类型安全性和编译时的类型检查。通过明确指定超类型的直接参数,可以避免在运行时出现类型不匹配或不兼容的错误。

在实际编程中,如果需要对超类型的直接参数进行投影操作,可以考虑重新设计类的继承结构或使用其他的编程技巧来达到相同的效果。

腾讯云相关产品和产品介绍链接地址:

  • 云服务器(CVM):提供可扩展的计算能力,满足各种业务需求。详情请参考:https://cloud.tencent.com/product/cvm
  • 云数据库 MySQL 版(CDB):提供高性能、可扩展的 MySQL 数据库服务。详情请参考:https://cloud.tencent.com/product/cdb_mysql
  • 人工智能平台(AI Lab):提供丰富的人工智能开发工具和服务,支持图像识别、语音识别、自然语言处理等应用场景。详情请参考:https://cloud.tencent.com/product/ailab
  • 物联网套件(IoT Hub):提供全面的物联网解决方案,包括设备接入、数据管理、消息通信等功能。详情请参考:https://cloud.tencent.com/product/iothub
  • 云存储(COS):提供安全可靠的对象存储服务,适用于各种数据存储需求。详情请参考:https://cloud.tencent.com/product/cos
  • 区块链服务(Tencent Blockchain):提供基于区块链技术的安全、高效的数据存储和交易服务。详情请参考:https://cloud.tencent.com/product/tencentblockchain
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Kotlin】类继承 ② ( 使用 is 运算符进行类型检测 | 使用 as 运算符进行类型转换 | 智能类型转换 | Any 类 )

文章目录 一、使用 is 运算符进行类型检测 二、使用 as 运算符进行类型转换 ( 智能类型转换 ) 三、Any 类 一、使用 is 运算符进行类型检测 ---- 在 Kotlin 中 , 如果不确定一个...实例对象类型 , 可以 使用 is 运算符进行判定 , 使用方法 实例对象 is 判定类型 上述用法可以判定 实例对象 是否是 判定类型 , 如果是 返回 true , 反之 返回 false ;..., 只要进行一次类型转换 , 在后面还要调用子类成员时就可以直接调用 , 不再需要手动转换类型 ; 在下面的代码中 : 父类时 Person 类型 , 子类是 Student 类型 ; 创建 Student...() 在进行第一次转换之后 , 后面 student 对象 可以直接调用 helloStudent 函数 , 不再需要进行先转换类型再调用 , 这就是 智能类型转换 ; (student as...Kotlin类层次结构根。

1.2K20

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

Kotlin 中使用:代替 extends 泛型类型上界进行约束。...是 Any 类型,所以 Kotlin 默认上界是Any? 1.2 where 关键字 当一个类型参数指定多个约束时,在 Java 中使用&连接多个类、接口。...如果 MutableList 参数类型使用 in 或者 out 修饰,会发生什么情况呢?...而使用 in 时,编译可以通过,因为该参数只能出现在方法入参。 此时,list2 和 list3 分别表示一个受限制 MutableList。在 Kotlin 中,这种行为被称之为类型投影。...因此,星号投影不能写入,只能读取。 四.总结 本文是 Kotlin 范型系列最后一篇文章。 本文讲述了 Kotlin 泛型约束、类型投影、星号投影特性。

2.4K20

深入理解Kotlin泛型系统

前言 Kotlin 泛型与 Java 一样,都是一种语法糖,只在源代码里出现,编译时会进行简单字符串替换。...声明点变型在类型声明时定义了该类型参数是用在入参还是出参上,之后在这个类中所有用到地方都会直接调用该类型定义名称来使用该类型协变或者逆变。...「*」投影 因为 Kotlin 源码中不允许忽略泛型参数,所以在一些泛型不重要地方,就不可避免使用 来表示。...泛型注意点: 在java编程中类型系统最棘手一部分是通配符类型。但是,在Kotlin编程中,是没有通配符,采用声明变化和类型投影来替代。 通配符作用: 使用界限通配符增加API灵活性。...总结 以上就是这篇文章全部内容了,希望本文内容大家学习或者工作具有一定参考学习价值,如果有疑问大家可以留言交流,谢谢大家ZaLou.Cn支持。

1.1K10

Kotlin入门潜修之类和对象篇—泛型及其原理

java中泛型 前面一直有提到,kotlin是运行于jvm上语言,其标的语言就是java,因此我们先来讲一下java泛型,了解了java泛型优缺点之后,我们就很容易明白kotlin中泛型设计初衷了...但是如果是T类那么是不允许像容器中添加元素,因为我们无法确定T类具体是什么类型,取出来时候就可能引起类型转换错误。代码示例如下: List<?...这里想要进行写操作,kotlin不允许!!! } 那么如何解决呢?...这就会引起类型转换异常!所以kotlin这种情形进行了限制。 解决方法就是禁止从from写入,告诉编译器我只读取from即可!...在kotlin中,默认类型上限是Any?,在定义类型时候,只能指定一个类,比如中只能指定T类上限是SupperT,而不能指定多个。

90030

kotlin基础语法

类型转换 由于不同表示方式,较小类型并不是较大类型类型,较小类型不能隐式转换为较大类型。 这意味着在不进行显式转换情况下我们不能把 Byte 型值赋给一个 Int 变量。...internal // 同一个模块中可见 继承 Kotlin 中所有类都继承该 Any 类,它是所有类类,对于没有类型声明类是默认类: class Example // 从 Any 隐式继承...使用 out 使得一个类型参数协变,协变类型参数只能用作输出,可以作为返回值类型但是无法作为入参类型: in 使得一个类型参数逆变,逆变类型参数只能用作输入,可以作为入参类型但是无法作为返回值类型...Kotlin 中使用 : 泛型类型上限进行约束。...如果你使用匿名对象作为公有函数 返回类型或者用作公有属性类型,那么该函数或属性实际类型 会是匿名对象声明类型,如果你没有声明任何类型,就会是 Any。在匿名对象 中添加成员将无法访问。

2.1K20

Kotlin学习笔记(七)-泛型

首先默认大家Java泛型有个基本认识,如果 不熟悉Java泛型,可以阅读文章,或是看下Java《Java核心技术卷一基础知识第10版》中关于泛型章节知识,讲述也很详细。...其实Kotlin泛型和Java很相似。他们都是伪泛型,所谓伪泛型就是我们们是无法获取到泛型具体类型。以为Java存在类型擦除和转换。...Kotlin协变与逆变 泛型参数即可作为传入参数,也可以作为返回值,但被in和out关键字修饰后就不一样了 out 叫协变 只能作为返回值读取 不能写入和修改(Kotlinlist中只有get方法...,为只读类型, 它子类泛型参数类型是父类泛型参数类型子类,也就是说泛型参数继承关系与类继承关系保持一致(所以叫协变),比如Number是Int父类 那么List也是List...(目的是兼容1.5) Kotlin不可以 定义了泛型了 创建时候就必须指定泛型 星投影只能只能作为形参,不能作为实参。

64320

Kotlin基础之泛型

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

94870

Kotlin语法基础之继承

Kotlin中所有的类都有一个公有的类:Any,这是所有没有声明默认父类。 class Example //隐式继承自Any Any!=Java.lang.Object。...为了显式地声明类,语法如下: open class Base(p:Int) class Derived(p:Int):Base(p) 如果类具有主构造器,则可以使用主构造器参数(并且必须)初始化父类...中,实现继承由以下规则控制:如果类从其直接类继承同一成员多个实现,则它必须覆盖该成员并提供自己实现(可能使用其中一个继承)。...要表示从其继承实现类型,可在尖括号中使用类型名称超级限定,例如,super。...总结 Kotlin类默认是final,如果需要子类继承,需要使用open修饰; Kotlin方法默认是不允许复写,只有用open修饰时,子类才可以进行覆写,并且需要使用override进行显示标注

83790

Kotlin 负责人:我们是如何一步步设计 Kotlin

对于 Kotlin 问题,我们现实生活中项目进行了大量实验,采用了一些没有前途方法,并与康奈尔大学 Ross Tate 进行了专门针对 Kotlin 研究合作,最终以灵活类型(Flexible...在 Kotlin 中,函数 listOf(1) 调用会推断出 List结果类型,因为参数类型给出了类型提示。...然而, listOf()  调用,由于既没有参数,也没有上下文中类型,因此无法编译。尽管从技术上讲,它可能被推断为 List ,表示此函数可以返回最宽类型。...例如,当 Kotlin 协程在 Kotlin 1.3 中变得稳定时,它们引入了一个新函数类——挂起函数和相应挂起函数类型。然而,不允许将挂起函数类型用作类型。...这是后来在 Kotlin 1.6 中添加,因为协程使用变得越来越多,并且实现此特性交互需求也越来越多(请参阅 KT-18707 支持将挂起函数作为类型)。

1.2K20

JetBrains首席语言设计师:我们将如何让Kotlin再活几十年

为了解决 Kotlin 问题,我们现实生活中项目进行了大量实验,采用了一些没有前途方法,并与康奈尔大学 Ross Tate 进行了专门针对 Kotlin 研究合作,最终以灵活类型(Flexible...在 Kotlin 中,函数 listOf(1) 调用会推断出 List 结果类型,因为参数类型给出了类型提示。...然而, listOf()  调用,由于既没有参数,也没有上下文中类型,因此无法编译。尽管从技术上讲,它可能被推断为 List ,表示此函数可以返回最宽类型。...例如,当 Kotlin 协程在 Kotlin 1.3 中变得稳定时,它们引入了一个新函数类——挂起函数和相应挂起函数类型。然而,不允许将挂起函数类型用作类型。...这是后来在 Kotlin 1.6 中添加,因为协程使用变得越来越多,并且实现此特性交互需求也越来越多(请参阅 KT-18707 支持将挂起函数作为类型)。

1.5K10

Kotlin】扩展函数总结 ★ ( 类扩展函数 | 私有扩展函数 | 泛型扩展函数 | 扩展属性 | 定义扩展文件 | infix 关键字用法 | 重命名扩展函数 | 标准库扩展函数 )

, Kotlin 编译器直接将 inline 内联函数 函数体 直接拷贝到 使用位置 ; 内联函数 类似于 C 语言中 预编译指令 宏定义 , 在编译时直接替换拷贝宏定义内容 ; Kotlin...表达式作为参数函数定义为内联函数 | 内联函数本质 - 宏替换 ) 博客进行理解 ; Kotlin标准库函数 , 参考 【Kotlin】标准库函数总结 ( apply 函数 | let 函数...非空类型扩展函数 如果定义 扩展函数 是为 可空类型定义 , 可空类型变量 想要调用该 扩展函数 , 在调用时直接使用 " . " 进行调用即可 ; 可空类型实例对象.可空类型扩展函数 代码示例..., Kotlin 编译器直接将 inline 内联函数 函数体 直接拷贝到 使用位置 ; 内联函数 类似于 C 语言中 预编译指令 宏定义 , 在编译时直接替换拷贝宏定义内容 ; Kotlin...表达式作为参数函数定义为内联函数 | 内联函数本质 - 宏替换 ) 博客进行理解 ; Kotlin标准库函数 , 参考 【Kotlin】标准库函数总结 ( apply 函数 | let 函数

2.2K30

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

② 空安全类型 Kotlin空安全类型原理是,Kotlin在编译过程中会增加一个函数调用,参数类型或者返回类型进行控制,开发者可以在开发时通过注解@Nullable和@NotNull方式来弥补Java...Java中任何引用都可能是null,这使得Kotlin来自Java对象进行严格空安全检查是不现实。Java声明类型Kotlin中称为平台类型,并会被特别对待。...这使得执行is检查不可能照顾到泛型,Kotlin只允许is检查星投影泛型类型。...属性作为字段暴露,那么就需要使用@JvmField注解进行标注。...④ 静态方法 Kotlin将包级函数表示为静态方法。如果这些函数使用@JvmStatic进行标注,那么Kotlin还可以为在命名对象或伴生对象中定义函数生成静态方法。

3.7K10

Kotlin 泛型详解

所以我想说是,泛型这东西,只要你 Java 泛型有一定认识,Kotlin 泛型基本可以直接用。那我们这篇文章要干嘛呢?只是做一个简单介绍啦,都很好理解。 1....对于协变类型,通常我们是不允许将泛型类型作为传入参数类型,或者说,对于协变类型,我们通常是不允许其涉及泛型参数部分被改变。...= List::class.java Kotlin 可以根据 * 所指代泛型参数进行相应映射,下面是官方说法: 对于 Foo ,其中 T 是一个具有上界 TUpper 协变类型参数...* 不允许作为函数和变量类型泛型参数! fun hello(args: Array){     ... } ... hello(args) // ERROR!!...* 不允许作为函数和变量类型泛型参数! interface Foo class Bar : Foo // ERROR! * 不能直接作为父类泛型参数传入!

1.2K20

From Java To Kotlin 2:Kotlin 类型系统与泛型终于懂了

也就是说,针对类型元素进行操作[子程序](https://zh.wikipedia.org/wiki/%E5%AD%90%E7%A8%8B%E5%BA%8F)、函数等程序元素,也可以操作相应类型...平台类型只能来自Java,因为Java中所有的引用都可能为null,而Kotlinnull有严格检查和限制。 但是在Kotlin中是**禁止声明**平台类型变量。 !...这个类型则没有太多实际意义。 - 当 Nothing 作为函数返回值时,意味着这个函数**永远不会返回结果**,而且还会截断程序后续流程。Kotlin 编译器也会根据这一点进行流程分析。...- 当 Nothing 作为函数参数时,就意味着这个**函数永远无法被正常调用**。这在泛型星投影时候是有一定应用。 - Nothing 可以看作是 Nothing?...List定义泛型参数前面多了一个 **out关键词**(加上out 发生协变 ),这个关键词就这个List特性起到了很大作用。

42450

KMM 求生日记二:KotlinNative 被踩中

Kotlin根级类与 Objective-C 根级类不兼容 Kotlin 中有一个类 Any,它是所有类根级类。...Java 所有类根级父类是 Object,但是在 Kotlin/JVM 中,这两者是统一,也就是说如果一段 Java 代码接收参数类型是 Object,那我们仍然可以将任意一个 Kotlin 对象作为参数传入...> class 对象,通过类名或该类对象都可以直接获取。在 Kotlin/JVM 中,Kotlin 有自己 KClass 类型,它与 Java Class<?...,一旦进行更改(无论是否在别的线程进行),都会抛出 InvalidMutabilityException 异常。...如果我们在运行中进行修改,会直接抛出 InvalidMutabilityException 异常并 crash。由于警告存在,上面这段代码很容易让开发者发现问题。

2.4K10

Kotlin】扩展函数 ① ( 扩展函数简介 | 为 Any 类定义扩展函数 | private 私有扩展函数 | 泛型扩展函数 | 标准函数 let 函数是泛型扩展函数 )

类中定义了扩展函数 , 则在整个项目中 , 该扩展函数都有效 ; 这就导致了 Kotlin 框架非常灵活 , 使用别人 SDK 时会发现 为各种现有类定义 扩展函数 ; 代码示例 : 在下面的代码中...接收者 ( 调用函数实例对象 ) , 同时还可以 获取 接收者 泛型参数类型 ; 泛型扩展函数 格式 : 一般 泛型扩展函数 都是为了 配合 链式编程 , 其 返回值类型 就是 接收者泛型参数类型..., Kotlin 编译器直接将 inline 内联函数 函数体 直接拷贝到 使用位置 ; 内联函数 类似于 C 语言中 预编译指令 宏定义 , 在编译时直接替换拷贝宏定义内容 ; Kotlin...中 内联函数 也是一种 编译时 进行 宏替换操作 ; 内联函数参考 【Kotlin】函数 ⑦ ( 内联函数 | Lambda 表达式弊端 | “ 内联 “ 机制避免内存开销 - 将使用 Lambda...表达式作为参数函数定义为内联函数 | 内联函数本质 - 宏替换 ) 博客进行理解 ; Kotlin标准库函数 , 参考 【Kotlin】标准库函数总结 ( apply 函数 | let 函数

1.6K20
领券