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

你绝对想不到 Kotlin 泛型给反射留下了怎样的坑!

可问题是你老人家仔细瞅瞅,协变类型强的事儿,真是没听说过.. 这就有意思了,明明用的是 Person 的实例,怎么后面的属性的泛型参数是 out Person?...没错,为了照顾到这一点,又不让类型系统出错, Kotlin 选择 person::class 的类型置为 KClass 来解决问题。...前面抛出这么个大坑,说实在的,不给出解决方案都不好意思写这篇文章。 3.1 类型强方案 谁说类型强不行了?谁说的??...当时就惊呆了,还以为这两种获取 KClass 的方式有什么重大差别呢,结果跟了下源码,是的,this::class 这种写法在调试的时候也是可以强制跳入调用栈的(反编译看字节码也可以),二位居然都是调用了下面的方法来获取...就问一句,你们这么搞,良心不痛? 4. 小结 这篇文章讲述了一个因 Kotlin 泛型类型严格导致某些情况下反射代码编译不通过的故事。

8.2K21
您找到你想要的搜索结果了吗?
是的
没有找到

用一个属性代理另一个对象的属性

,毕竟它是一个属性,通过一个属性我们似乎就可以把它的 setter 直接拿到,而不需要显式的传入了。...既然是 ObjectDelegate,我们不免就要想,为什么不能用绑定了 receiver 的属性或者函数引用作为参数呢?...= null) = ObjectPropertyDelegate1(receiver, property = this, defaultValue = defaultValue) fun KFunction1...,这个例子需要引入的包是这样的: import kotlin.jvm.internal.PropertyReference import kotlin.reflect.* 如果对于反射以及属性及函数引用这样的概念和知识点不是很了解...大家如果有兴趣,也可以在 gradle 中引入: compile 'com.bennyhuo.kotlin:opd:1.0-rc' 最后再说一句,估计雀雀又要吐槽了,这也是没有办法的事儿,哈哈。

84820

Kotlin服务端Spring Boot系列干货教程4 - Kotlin和Java比较

通过使用这种方法,一旦编译并运行虚拟机,源代码就可以在任何平台上运行 Kotlin程序可以使用所有现有的Java框架和库,是的,Kotlin程序可以使用所有现有的Java框架和库,甚至依赖于注释处理的高级框架也是如此...关于kotlin语言的主要重点是它可以轻松地与Maven的,摇篮和其他构建系统集成。 Kotlin可以轻松学习,平易近人。通过简单的阅读语言参考可以轻松学习。语言干净直观(易于使用和理解)。...Java自动转换为Kotlin,JetBrainsIntelliJ集成了一个新功能,Java转换为Kotlin,节省了大量的时间。而且它也节省了我们重新编写代码。...Kotlin用Any表示Java中的Object Kotlin没有new关键字,直接赋值即可 Kotlin把函数当参数传,和js一样 Java中强制转换:(int)mHeader,Kotlin中mHeader...小技巧 如果不知道Kotlin怎么写时,可以写一个Java的,然后用Idea的Java代码Kotlin功能转换一下 Kotlin的传参写法:str: String,名字在前,类型在后 ... ----

1.1K10

解毒 Kotlin Koans: 02 震惊!你的 Java 代码居然被转换成了这样...

那就是,只要我们写的代码可以支持下面的代码运行,并返回 "OK",那么这事儿就成啦: start() 既然这样,我们除了可以有上一回提到的两种普通解法之外,还应该有以下几种高端解法: 默认参数法:...从此以后,就成了 Kotlin 大神,反正只要用工具把 Java 代码一下就好啦,还学什么学 >.<! 2....什么玩意,空指针啊 后来就经常需要将原来用 Java 编写的 Activity 转换为 Kotlin 版本的,例如: public class TestActivity extends Activity...: Bundle) { super.onCreate(savedInstanceState) ... } } 的挺快啊,还没反应过来,就转完了!...因为 Java 中有 Raw 类型,你可以不传任何泛型参数给 BaseView 就像我们在声明 BasePresenter 的时候那样。

71120

10 年 Android 开发者经验分享:如何从 0 到 1 开启职业生涯

它的一个很酷的特性是自动 Java 代码转换为 Kotlin。这意味着,你能在网上(如 StackOverflow.com 上)找到的任何代码片段都可以换为 Kotlin。...幸运的是,对于我们的职业,这一点可以通过互联网实现。具体来说: 构建并向世界发布一款真实的应用程序(即通过 Play Store)。 在 GitHub 上创建一个账号,并为开源软件做贡献。...通过博客和社交媒体分享在线学习经验。上述几条有个很大的好处,就是没有时间限制,可以在你的整个职业生涯中增加你的信誉。 6 了解 C#,应该从 Xamarin 入手?...应该学下? Jetpack Compose 是谷歌新推出的一个 Android UI 框架。这是一种使用 Kotlin 编写 UI 的新方法。从正面说,使用新框架是一种乐趣。...你可以随时用 Compose 开发一个新的应用,看看它是什么样子。 8 小结 在从事了 10 年的 Android 开发工作后,如果要重新开始的职业生涯,就会像上面所说的那样做。

1.1K30

100个最常问的JavaScript面试问答-第3部分(共10部分)

问题28.可以匿名函数分配给变量并将其作为参数传递给另一个函数? 问题29.什么是arguments object(参数对象)? 问题30.可以参数对象转换为数组?...答: 有多种方法可以从数组中删除重复项,但让告诉您一种最流行的方法。 使用过滤器-通过对JavaScript数组应用过滤器,可以从其中删除重复项。要调用该filter()方法,需要三个参数。...可以使用function关键字将其定义为: function named() { // write code here } 问题28.可以匿名函数分配给变量并将其作为参数传递给另一个函数?...可以匿名函数分配给变量。 也可以将其作为参数传递给另一个函数。...问题30.可以参数对象转换为数组? 答: 是的,我们可以使用Array.prototype.slicearguments对象转换为数组。

1.6K40

Kotlin】数字类型 ( 安全转换函数 | 浮点型整型 )

文章目录 一、安全转换函数 二、浮点型整型 一、安全转换函数 ---- 在 Kotlin 中 , 字符串 String 类型 转为 数字类型 , 如果 字符串 代表的数字类型 与 要换的 数字类型...; /** * 字符串解析为[Int]数字并返回结果 * 如果字符串不是数字的有效表示,则为' null '。.../** * [Double]值转换为[Int]。...*/ public override fun toInt(): Int roundToInt 四舍五入函数 , 函数原型如下 : /** * [Double]值舍入为最接近的整数,并将结果转换为[Int...Int.MIN_VALUE -> Int.MIN_VALUE else -> Math.round(this).toInt() } 格式化浮点数 : /** * 使用此字符串作为格式字符串,并返回通过替换指定参数获得的字符串

2.9K30

Kotlin学习日志(二)数据类型

的数据类型转换函数 转换函数说明 toInt 转换为整型 toLong 转换为长整型 toFloat 转换为浮点数 toDouble 转换为双精度数 toChar 转换为字符 toString 转换为字符串...,比如“ string_array[2]”(PS:获取该数组的第三个元素,下标是从0开始的),Kotlin也能通过方括号加下标来获取指定元素,不过Kotlin还有get和set两个方法,通过get方法获取元素值...字符串变量的toCharArray方法 字符串变量的toCharArray方法 可以看到Kotlin相对于Java的转换要简单一些,通过方法即可实现。...故而实际开发中基本用不到集合,都是用队列和映射(PS:此时的内心有一万只羊驼奔腾而过~) 4.2 队列List/MutableList 队列相对于集合来说的优势就在于有次序,优点如下: (1)队列能够通过...get方法获取指定位置的元素,也可以直接通过下标获取该位置的元素。

3.3K20

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

说完共同点我们再聊聊他们的不同点吧~ 三. kotlin 和 java8 的不同点 kotlin 和 java8 的不同挺多的,简单的归纳了一下: Kotlin 可以用操作符简洁的判空 Kotlin...5.1.3 kotlin 方法自动传参 Kotlin 可以在 构造方法或者相关函数大括号里面设置默认参数,这样传参就可以使用默认参数了,我们具体看看怎么使用的吧~ ?...第二个参数可以省略,此时会使用默认值 ? ? 不省略时跟 Java 无异 ?...5.1.4 kotlin named argument named argument 的中文含义是 可以根据 参数名 进行传递参数,传参顺序不需要严格按照函数定义顺序,这样就可以避免参数误传的问题了 ?...利用该运算符,可以很容易的把可空类型转换为非空类型,详细代码如下: if(foo!=null) { foo } else { bar } foo?.length?

1.6K30

Kotlin 1.2 的新增了哪些特性?

KotlinConf 大会宣布了 Kotlin 1.2 RC 版,并宣布 Kotlin/Native 已支持用于开发 iOS 应用和 Web 应用开发。...如果调用一个返回类型参数 T 并将返回值转换为特定类型 Foo 的泛型方法,则编译器现在可以理解此调用的 T 需要绑定到 Foo 类型。...这可能会影响应用程序的整体性能;仅在多个类之间共享一些复杂的状态并在类初始化时更新时才使用它。 “手工”的解决方法是控制流的子表达式的值存储在变量中,而不是直接在调用参数中对它们进行求值。...JavaScript 后端 默认启用对类型化数组(TypedArrays)的支持 JS typed arrays 支持 Kotlin 基本数组(如 IntArray, DoubleArray)转换为...后话 看了这么多的改变,我们是否就可以深入的学习Kotlin语言,不妨看看这边文章:Kotlin真的值得学习? 作者:OSC - 协作翻译。

2.8K10

Kotlin版图解Functor、Applicative与Monad

我们也知道如何一个函数应用到这个值上: ? 这很简单。 那么扩展一下,我们说任何值都可以放到一个上下文中。 现在你可以把上下文想象为一个可以在其中装进值的盒子: ?...如何一个接受两个参数的函数应用到两个已包装的值上?...“大人物可以使用具有任意数量参数的函数,”它说。 “装备了 ($) 与 (*) 之后,可以接受具有任意个数未包装值参数的任意函数。 然后传给它所有已包装的值,而我会得到一个已包装的值出来!...functor: 可通过 fmap 或者 ($) 一个函数应用到一个已包装的值上。 applicative: 可通过 (*) 或者 liftA 一个已包装的函数应用到已包装的值上。...monad: 可通过 ))= 或者 liftM 一个返回已包装值的函数应用到已包装的值上。

1.2K20

Kotlin 1.2 的新增特性

自:开源中国 www.oschina.net/translate/whats-new-in-kotlin-12 多平台项目 (实验性) 多平台项目是 Kotlin 1.2 中的一个新的实验性功能,允许你在...其他语言特性 注解中的数组常量 从 Kotlin 1.2 开始,注解的数组参数可以使用新的数组常量语法而不是 arrayOf 函数来传递: 数组常量语法被限制为注释参数。...如果调用一个返回类型参数 T 并将返回值转换为特定类型 Foo 的泛型方法,则编译器现在可以理解此调用的 T 需要绑定到 Foo 类型。...这可能会影响应用程序的整体性能;仅在多个类之间共享一些复杂的状态并在类初始化时更新时才使用它。 “手工”的解决方法是控制流的子表达式的值存储在变量中,而不是直接在调用参数中对它们进行求值。...JavaScript 后端 默认启用对类型化数组(TypedArrays)的支持 JS typed arrays 支持 Kotlin 基本数组(如 IntArray, DoubleArray)转换为JavaScript

2.8K70

Java 会走向晦暗Kotlin 会取而代之

自:DEV社区 Stackoverflows上的趋势图显示Java从2015年以后走下坡路,而Kotlin开始上升。...但是,确实认为Java 作为一种语言越来越多地被Kotlin所取代。其他JVM语言(Scala,Groovy,Clojure)可能试图取代Java,但他们从未真正实现过这一承诺。...认为他们只是看到了一个很好的机会,通过使用不同的技术堆栈在多个项目中重用代码,从而提高Kotlin的知名度。...10.认为我们会看到Java逐渐下降是一种非常受欢迎的语言,特别是在普通大学生中 - 喜欢相信大学已经Java推向学生很长一段时间了。...正如其他人所说的那样,Kotlin可能会替代Java,因为它几乎可以完成Java的所有工作,只需少量代码(如果错了就纠正) - 网络应用程序,后端程序,Android应用程序等等...... 11.

95110

字节跳动Android客户端实习 3+1 面经,内部面试官透露通关秘籍

除了通过内联函数减少函数调用的开销,还有什么用途? 如果现在有一个高阶函数被 inline 修饰,不想让它的参数被内联,该怎么办呢? Kotlin可以跨平台编译的,讲讲你的了解?...现在如果让你用 Kotlin 写一个跨平台的项目,你该怎么做? 5. 浏览器里从输入一个网址,到最终看见网页,发生了什么? HTTP 是应用层协议,讲讲是如何建立的?...具体来说它们有些是带 Receiver 的、有些是带参数的,你在使用过程中是怎么选择的呢? 5. OOP 中的设计模式有了解过? Java 中的单例模式分为哪些呢?...也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油。 每一场面试都当作免费的培训,积极调整心态,不但能达到一个双赢的局面,还可以减少紧张的情绪,从而获得更好的表现。...差的是系统知识,差的结构框架和思路,所以通过视频来学习,效果更好,也更全面。关于视频学习,个人可以推荐去B站进行学习,B站上有很多学习视频,唯一的缺点就是免费的容易过时。

1.5K00

Kotlin概述与Java的比较

一旦kotlin程序被转换为字节码,它可以通过网络传输并由JVM(Java虚拟机)执行。...关于kotlin语言的主要重点是它可以轻松地与Maven的,摇篮和其他构建系统集成。 Kotlin可以轻松学习,平易近人。通过简单的阅读语言参考可以轻松学习。语言干净直观(易于使用和理解)。...Java自动转换为Kotlin – JetBrainsIntelliJ集成了一个新功能,Java转换为Kotlin,节省了大量的时间。而且它也节省了我们重新编写世代代码。...考虑以下示例 – 你也可以喜欢在Docker和Kubernetes上部署Kotlin应用程序 Kotlin和Java之间的区别 空安全 Null Safety– 如上节所述,Kotlin...功能性编程使得Kotlin在收藏上更加便利 – 输出 – 15,11 高阶函数是函数作为参数并返回函数的函数。

2.9K10

从 Java 到 Kotlin,再从 Kotlin 回归 Java

这是 Kotlin感到最大惊喜的地方。看看这个函数: ? 当你调用 inc(1) 的时候会输出什么呢?在 Kotlin 中方法参数是一个值,所以你不能改变 num 参数。...在 if 主体中,你可以添加另一个 num,这并不令人震惊(新的块级别作用域)。 好的,在 Kotlin 中,inc(1) 输出 2。但是在Java中,等效代码无法通过编译。 ?...两个团队都在同一家公司工作,所以或许他们可以相互交流并在遮蔽问题上达成一致共识?感觉 —— IDEA 是对的。无法想象存在这种遮蔽了方法参数的有效用例。 ? 类型推断 ?...一个 Java 程序员来到 Kotlin 阵营。 “嗨,Kotlin是新来的,有静态成员可用?”他问。 “没有。是面向对象的,而静态成员不是面向对象的,” Kotlin回答。...可以想像那是一个匿名内部类的单例实现。而实际上,这个类并不是匿名的,它的名字是 Companion,你可以省略这个名称。明白?这很简单。” 很喜欢对象声明的概念——单例是种很有用的模式。

1.8K40
领券