Tag: 语言设计

为什么我不能让每一个Kotlin类都成为一个数据类?

当然,我排除了任何涉及违反数据类规则的理由。 所以如果你知道你不需要继承它(虽然我的理解是规则在Kotlin1.1中消失)。 制作一个数据类有什么不利之处? 为什么所有符合条件的类都只能提供数据类的功能呢? 这应该都可以被编译器检测到而不需要特殊的关键字。 当然这个答案可能是显而易见的,取决于问题1的答案。 我是否有理由不把所有符合条件的类标记为数据类?

Kotlin无效安全?

让我们有一个函数foo和一个类Bar : fun foo(key: String): String? { // returns string or null } class Bar(x: String, y: String) { // … } 现在,让我们有这个代码: val x = foo("x") val y = foo("y") if (x.isNotEmpty() && y.isNotEmpty()) return Bar(x, y) 问题是这个代码不会编译。 因为它需要Bar(x!!, y!!) 。 但是,当我把它的内容替换功能, !! 不需要。 val x = foo("x") val y = foo("y") if ((x […]

测试双打的Kotlin哲学是什么?

测试双打的科特林哲学是什么? 由于所有的类和函数都被默认封装(不公开 ),像Mockito这样的嘲笑框架显然不是一流的公民。 已经写了很多关于这个问题的文章 ,还有关于可能的解决方案 ,但是Kotlin的设计师想要用双打来测试呢? 它是假货和存根,还是应该扮演你自己的间谍和嘲笑?

了解Kotlin的特质

在Kotlin中,我们有可能创建一个“可能需要在呼叫方扩展类的特征”,比如 class Bar {} trait T1 : Bar {} class Foo : Bar, T1, T2, T3 {} class Wrong : T1, T2 //error: Wrong should extend Bar 我无法想象任何可以应用这种结构的流程。 谁能告诉我为什么我们需要它?