当前位置: 首页 > news >正文

重庆建设工程信息网安全监督特种人员一网站关键词优化有用吗

重庆建设工程信息网安全监督特种人员一,网站关键词优化有用吗,会宁网站建设,手机网站用什么制作前言 在开始之前&#xff0c;让我们先讨论一下泛型。泛型用于为类、函数或接口提供通用的实现。下面是一个示例泛型方法&#xff1a; fun <T> displayValue(value: T) {println(value) }fun main() {displayValue<String>("Generics")displayValue<…

前言

在开始之前,让我们先讨论一下泛型。泛型用于为类、函数或接口提供通用的实现。下面是一个示例泛型方法:

fun <T> displayValue(value: T) {println(value)
}fun main() {displayValue<String>("Generics")displayValue<Int>(10)
}

在上面的代码中,你可以传递任何类型的数据给 displayValue 方法。现在让我们尝试打印出 T 的类型。运行以下代码并查看输出:

fun <T> displayValue(value: T) {println(value)println("Type of T: ${T::class.java}")
}fun main() {displayValue<String>("Generics")displayValue<Int>(10)
}

在执行上述代码后,你将会看到以下错误信息:

Cannot use 'T' as reified type parameter. Use a class instead.

这是因为和 Java 一样,在 Kotlin 中,当你使用泛型时,类型信息会在编译时被擦除。这个过程被称为类型擦除。例如,如果你有一个 List<String>,在运行时,它只被视为普通的 List,没有任何关于其类型参数的知识。

这意味着你无法在运行时执行诸如检查对象是否为泛型类型之类的操作。

为了解决这个问题,我们需要在泛型函数中传递类型信息,如下所示:

fun <T> displayValue(classType: Class<T>, value: T) {println(value)println("Type of T: $classType")
}fun main() {displayValue<String>(String::class.java, "Generics")displayValue<Int>(Int::class.java, 10)
}

为了避免编写上述样板代码,kotlin 提供了 reified 关键字来在运行时访问类型。我们看下面的代码

inline fun <reified T> displayValue(value: T) {println(value)println("Type of T: ${T::class.java}")
}fun main() {displayValue<String>("Generics")displayValue<Int>(10)
}

关键字reified

关键字 reified 可以让你在运行时访问在代码编译期间应该被擦除的类型信息。reified 关键字使用内联函数来执行这个任务。

如果一个函数被标记为 inline,那么无论在哪里调用该函数,编译器都会将整个函数体直接粘贴到调用处。

除了上述用例,使用 reified 还可以做其他一些事情。例如,我们可以使用相同参数和名称但返回类型不同的函数。比如,我想写一个根据分数返回不同数据的函数:

ifun displayData(marks: Int): Int { return marks 
} fun displayData(marks: Int): String { return "Congratulations! you scored more than 90%"; 
}

上面的重载函数会报错,因为函数重载要求参数的数量或类型不同,而不是返回类型不同。

为了解决这个问题,我们可以使用 reified 关键字重构上述函数:

inline fun<reified T> displayData(marks: Int): T {return when (T::class) {Int::class -> marks as TString::class -> "Congratulations! you scored more than 90%" as Telse -> "Please enter valid type" as T}
}
fun main() {val intMarks: Int = displayData(60)val stringMessage: String = displayData(95)println("$intMarks")println("$stringMessage")
}

reified限制

reified 类型参数的一个主要限制是它只能与内联函数一起使用。这种关联是由于 reified 类型通过在调用点内联函数的代码来保留类型信息。

reified 类型参数不能表示一些复杂或不可表示的类型。例如,你不能直接为类似 List<Int> 或 Array<String> 这样的类型使用 reified 参数。

inline fun <reified T> printList(list: List<T>) {// 对于像 List<Int> 这样的类型,这样的写法无法正常工作
}

reified 类型参数不能在某些情况下使用,例如作为非内联函数的类型参数、在对象声明中或作为类中的属性类型。

class SampleClass<reified T> { ... } // 这样是行不通的

http://www.mmbaike.com/news/108049.html

相关文章:

  • 网站如何做推广google搜索中文入口
  • 华为外包做的网站百度友情链接
  • 在国外做h网站怎么样自己做网站的软件
  • 做网站需要备几个案怎么让百度收录网址
  • 做商城网站需要什么条件百度广告怎么做
  • wap手机网站开发软件最火的推广平台
  • 重庆景点图片高清图片泉州关键词优化软件
  • 电子商务的网站建设要求步骤网络销售公司经营范围
  • 网站建设维护公司网络优化工程师工作内容
  • 教人做素食的网站app推广引流
  • 网站宣传的方法主要有seo翻译
  • 怎么使用网站服务器企业qq一年多少费用
  • dede 网站源码佛山网站建设公司哪家好
  • 成都哪家公司做网站最好信息流优化师简历怎么写
  • 开发一个网站做爬虫整合营销传播工具有哪些
  • 如何制作网站板块百度竞价排名收费
  • 张家港网站推广优化近期10大新闻事件
  • 制作自己的网站学校汽车营销策划方案ppt
  • 橙象品牌设计宁波seo外包引流推广
  • 学校网站首页站长之家 站长工具
  • 独立站如何推广免费手游推广平台
  • 网站访问流量怎么赚钱软文的概念
  • 域名备案和网站备案是一回事吗百度搜索什么关键词排名
  • 做一个购物网站需要多久百度seo快速
  • 网站子域名查询给企业做网站的公司
  • 简单的企业网站域名购买
  • 网站推广软文甄选天天软文郑州seo线上推广系统
  • 以下哪一项不属于seo对网站推广的作用搜索引擎有哪些种类
  • 河南省建设厅执业资格注册中心网站网推广公司
  • 广东网站建设加工seo优化一般包括哪些内容()