Kotlin:泛型、反射以及类型 T 和 T:Any 之间的区别

2023-11-25

如果我尝试访问泛型类型 T 的 javaClass,Kotlin 编译器会抱怨 T 不是 kotlin.Any 的子类型

class Foo<T> (val t: T ){
    val cls = t.javaClass // Error, T is not a subtype of kotlin.Any
}

如果将 T 定义为 Any 的子类型,则一切正常。

class Bar<T:Any> (val t: T ){
    val cls = t.javaClass // OK
}

Q1) 如果类型“T”不是“任何”的子类型,那么它可以是哪个类的子类型?

Q2) T 的所有实例都存在 javaClass 吗?如果存在,我如何访问它?


默认通用上限 is not Any but Any?.

这也意味着获取一个值不是空安全的javaClass来自可为空的参数。

为了得到一个javaClass来自泛型类型实例Any?上限,你可以将其转换为Any:

val cls = (t as Any).javaClass //unsafe
val clsOrNull = (t as? Any)?.javaClass //safe
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Kotlin:泛型、反射以及类型 T 和 T:Any 之间的区别 的相关文章

随机推荐

  • Rails 不断告诉我当前尚未安装

    I use rvm管理不同的红宝石及其宝石组合 我的 shell 是 zsh 其中 oh my zsh 配置了基本设置 启用的 oh my zsh 插件有 ruby rails osx 和 git 这是我用来安装 ruby 1 8 7 和r
  • 意外的keyword_end,期待$end(语法错误)

    嘿 我是 ruby on Rails 的新手 我正在尝试从这个博客运行一个简单的程序 但遇到了很多问题错误 http goodbadtech com 2009 05 13 ruby on rails import csv data into
  • 在 Qt 中将字符数组的内容复制到 QString

    我有一个字符指针 在任何运行中都可以有不同的长度 例如 char myChar 一次运行其内容可以是 Hi 在另一次运行中它可以是 Bye 我想复制内容myChar到 QString 例如如果我有 QString myString 我想复制
  • 如何将 Linq 与 Castle ActiveRecord 结合使用

    我正在使用 Castle ActiveRecord 并注意到下载包含该文件 Castle ActiveRecord Linq dll 我还没有找到任何将 Linq 与 ActiveRecord 一起使用的文档 仅some old 博客文章
  • 如何在 C++ 中增加字母?

    我正在用 C 创建凯撒密码 但我不知道如何增加字母 我需要每次将字母加 1 并返回字母表中的下一个字母 像下面这样加 1 a 并返回 b char letter a cout lt lt letter 0 1 这个片段应该可以帮助您入门 l
  • 汇编代码实际上是如何在基础层面上被解释的?

    我真的很喜欢从下到上理解编程 所以 我学习了一台微型 64kb 计算机的内部构造 因为我对从晶体管级别理解计算机非常感兴趣 我了解晶体管 多路复用器 解码器的创建 ALU 的创建等 对于 LC3 我得到了这一点 这是我学到的 像 0001
  • 如何添加泛型约束

    我无法找出如何限制泛型类型 看起来像K需要实施core cmp Eq and core hash Hash特征 我无法在文档中找到所需的语法 use std collections HashMap struct Foo
  • C# 在画布中拖放图像

    我尝试谷歌搜索如何在画布上拖放 UIElements 但找不到我正在寻找的任何内容 我有一个带有 Window 的 C WPF 应用程序 在窗口内我有一个画布 我可以在其中添加图像 我想要的是能够拖放图像 同时保持在画布的边界内 我还希望它
  • 使用新 Excel 动态数组公式的累积和公式

    我在 Excel 中使用新的动态 即溢出 公式 我想要一个动态数组 它是另一个动态数组的累加或运行总计 假设我有以下动态数据A1 A8 12 20 14 13 12 13 26 11 找出这个数组中的差异很简单 OFFSET A1 1 0
  • Javascript instanceof 究竟是如何工作的?是慢风格吗?

    性能如何instanceof 巨大的图书馆 公平吗 它是否沿着原型链向上移动逐个 与此类似 var john constructor while true if Human return true prototype constructor
  • 在内容提供商的帮助下打开资产文件时出现问题

    我的要求是通过内容提供程序从另一个应用程序打开一个应用程序的资产文件 我使用 ContentProvider 实现公开该文件 我可以打开几个文件并阅读 但是在打开一些文件时我遇到了异常 请找到打开资产文件的实现 Override publi
  • Invoke-Sqlcmd无法运行

    我有一个 PowerShell 脚本 用于检查正在运行的服务器的 CPU 级别 如果高于某个阈值 它将运行 SQL 存储过程和电子邮件 该脚本在我的使用最新版本 PowerShell 的开发服务器上正确运行 但是 我在运行时遇到问题Invo
  • Java 中的反向 HashMap 键和值

    这是一个简单的问题 我有一个简单的 HashMap 我想反转其中的键和值 HashMap
  • 在 Linux 上使用 C++ 发送邮件

    有人能给我一个如何使用 C 程序发送邮件的例子吗 我遇到过一些程序 但它们的描述性并不强 如果我需要更多选择 我还想知道还有哪些其他库 您可能感兴趣libcURL 它是一个很棒的多平台 C 库 支持许多不同的协议 包括 SMTP 官方网页包
  • Django:UpdateView 限制每个用户

    我有一个网站 用户可以在其中创建和编辑自己的列表 我使用通用视图 CreateView 来允许用户创建列表 我想使用通用视图 UpdateView 来允许他们编辑列表 但是login required True在这种情况下还不够 因为只有列
  • 类上的 JavaScript 点击事件监听器

    我目前正在尝试编写一些 JavaScript 来获取已单击的类的属性 我知道要以正确的方式执行此操作 我应该使用事件侦听器 我的代码如下 var classname document getElementsByClassName class
  • 避免 Java CMS GC 中升级失败

    我有一个使用 CMS 垃圾收集的 Java 应用程序 每天都会遇到几次 ParNew 升级失败 完整 GC 请参阅下面的示例 据我所知 当垃圾收集在旧一代中找不到足够的 连续的 空间来将对象从新一代提升到其中时 就会发生提升失败 此时 它被
  • 自动滚动到页面底部

    我有一个问题清单 当我单击第一个问题时 它应该自动将我带到页面底部的特定元素 我怎样才能用 jQuery 做到这一点 jQuery 不是必需的 我从谷歌搜索中得到的大多数最重要的结果都给了我这个答案 window scrollTo 0 do
  • 如何仅针对某些产品跳过 woocommerce 上的购物车页面?

    我将其添加到我的functions php 文件中 add filter woocommerce add to cart redirect woo redirect to checkout function woo redirect to
  • Kotlin:泛型、反射以及类型 T 和 T:Any 之间的区别

    如果我尝试访问泛型类型 T 的 javaClass Kotlin 编译器会抱怨 T 不是 kotlin Any 的子类型 class Foo