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

Kotlin 泛型:类型参数约束

Kotlin 泛型:基本使用Kotlin 泛型:类型参数约束系列持续更新中,欢迎关注订阅。...「数值类型列表」中的每一个元素的和,会发现有点棘手:因为「类型参数」T 可以是任意类型,我们根本无法编写出一个适用于「任意类型」的sum()函数。...什么是类型参数约束对于上述场景,最理想的实现应该满足这些条件:只有数值类型的列表才能调用这个拓展函数拓展函数对「类型参数」所具备的特征有必要的了解,如知道它是一个Number类型因此,我们需要使用泛型参数约束...中的泛型属性也同样变得可空,这使得泛型类在具体实现的时候,需要考虑参数为空的情况,也让编写代码的具体实现变得复杂。...理解了它们的区别,就能明白为什么同样是基于 JVM 字节码,Kotlin 能在 Java 的基础之上实现更严格的可空/非空特性,而 Groovy 却反其道做成了一门动态类型的语言。

2.3K31

Kotlin Maps:五个基本函数

在这篇文章中,我谈论的是maps的基础知识。我将向您展示处理maps时最常用的函数。 Kotlin 中maps的用途 在使用maps之前了解什么是maps。本质上,映射是键值对的集合。关键是标识符。...您可以使用它来查找集合中的特定元素。该值是您要存储的数据,它与一个键相关联。 本质上,映射是键值对的集合。 数据类型的实现是?数据结构。maps的主要实现有两种: ?...但是,您应该知道大多数默认构造函数都会创建哈希表(例如 Java 中的?LinkedHashMap)。 支持 Kotlin Maps 的不变性 有趣的是,Kotlin 中maps的标准接口是不可变的。...它返回与该键关联的值。如果映射中不存在键,则返回null。Kotlin 鼓励?空安全。这就是为什么返回类型被清楚地标记为可空类型的原因。它强制您处理该值可能为空的事实以防止运行时异常。...我将提到另外两种您经常使用的方法。 Clear 该**?Clear** 方法删除maps中的所有项目。 它不接收或返回任何参数。它清空maps,将maps的大小设置回零。

2.4K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Kotlin 的 Nothing 详解

    基于这样的前提,当我们写出这个函数声明的时候: fun nothing(): Nothing { } 我们不可能找到一个合适的值来返回。你必须返回一个值,但却永远找不到合适的返回值。悖论了。...这是一种很常用的工具函数的写法,包括 Kotlin 和 Compose 的官方源码里也有这种东西。 那么我们继续来看它的返回值类型:我都不返回了,就没必要还写 String 了吧?那写什么?...} 虽然我找不到 Nothing 的实例,但是这个函数本来就是永远抛异常的,找不到实例也没关系。哎,这不就能用了吗?对吧? 不过,能用归能用,这么写有啥意义啊?是吧?价值在哪?...——我以前还跟人说「Nothing 是所有类型的子类型」这种说法是错误的,惭愧惭愧,是我说错了。 不过,这个特性又有什么作用呢?...一个元素类型为Nothing 的 List,将会导致我无法找到任何的元素实例来填充进去,但是这个 List 本身是可以被创建的: val emptyList: List = listOf

    34130

    Kotlin 集合 聚合操作详解

    前言 什么是聚合操作?聚合操作是指基于集合内容返回单个值的操作。 例如返回集合中的最大值,或者最小值。 返回集合中的平均值。 返回集合参数累计和。 返回集合元素总数量。 等等。...那就应该能够更清晰的理解聚合的含义了。 引读 集合有关系的,其他几篇文章介绍。...所以针对该情况, kotlin提供了*OrNull方法。在集合元素null的情况下。...它会按照集合的倒序也就是从右往左进行元素遍历计算。 在foldRight和reduceRight中,第一个参数变成了集合元素变量,第二个参数变成了累计值。...+ element+index } println(sss) } //输出 sum: 3,elemen:2, index:1 sum: 6,elemen:1, index:0 7 我将计算中的几个元素打印一下

    26130

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

    在Kotlin中,每个变量或表达式都有一个确定的类型,例如Int、String、Boolean等,类型可以是可空的或非空的,例如 `String?` 或 `String`。...有些时候Java代码包含了可空性的信息,这些信息使用注解来表达。当代码中出现了这样的信息时,Kotlin就会使用它。因此Java中的@Nullable String被Kotlin当作String?...除了对于函数返回值类型和返回值的自动补充之外,它的特殊之处更多地在于语义和用途的角度。它是由官方规定的,用于表示**「什么也不返回」**的场景的**返回值类型**。...在 Kotlin 中,不存在真正没有返回值的函数,所有「没有返回值」的函数实质上的返回值类型都是 Unit,而返回值也都是 Unit 这个单例对象。...这种情况下,我们遇到了一个悖论,即必须返回一个值,但却永远找不到合适的返回值 #### Nothing的作用: 作为函数 `永远不会返回结果` 的提示 ``` fun nothing() : Nothing

    46950

    Kotlin中内联函数的作用是什么?

    在以前,因为学过一段时间Kotlin(并没有实际开发中用过),很多东西都忘记了,但是kotlin的代码看起来其实和Java没什么区别,感觉都差不多。所以不要认为 Kotlin 很难学。...首先,什么是内联函数 inline? Kotlin的内联函数属于Kotlin的高级特性之一,使用起来也非常简单。...PS:(不要觉得kotlin好难,其实我也是现学现卖,虽然以前也看过一点基础,哈哈) 下面我们再扩展一些知识: 以下源于大家的回答,我并不能明白具体原因,所以需要周末补课。...非局部返回标记 为了不让lamba表达式直接返回内联函数,所做的标记 相关知识点:我们都知道,kotlin中,如果一个函数中,存在一个lambda表达式,在该lambda中不支持直接通过return...("test...") } fun innerFun(a: () -> Unit) { a() } 非局部返回我的理解就是返回到顶层函数,如上面代码中所示,默认情况下是不能直接 return 的,但是内联函数确是可以的

    1.4K10

    ViewPager与Fragment那些事儿

    在开发之前,考虑了产品需求和用户实用场景: 1.产品需求:输入框只要有变化,就会以输入框当前词触发本地搜索,并且依据本地搜索元素数量来判断是否自动触发网络搜索。...当触发网络搜索有回包之后,会出现上方的tabHost。下方内容区域展示可滑动。tabHost可点击。...考虑到两个问题之后,认为需要对Fragment做重用处理,如果在搜第一个字的时候产生多个Fragment,那么搜王者荣耀的时候,应该能够复用第一次产生的Fragment,否则可能会导致new 过多的Fragment...那么为什么返回这个参数能保证数据集正确更新到?看看源码咯: ?...问题来了:为什么一定要传POSITION_NONE,传别的不行吗,这个方法不应该是只为返回NONE来设计的吧,不然要他何用。继续看源码~ ?

    92980

    【翻译】Kotlin致简代码之路

    Martin ,页码 34 根据致简代码定义,函数应该很小并且职责单一。我们应该分解子程序并给他们取一个可描述性的名称。这样的话,我们的代码就会变得像一个故事。...我们不应该制造出那些一看到函数名称就感觉意图不明显,发生非期望中的隐藏的变化。但是副作用到底是什么问题呢?...我只想指出最后的那三行。即使是 Kotlin ,避免返回 null 也是取决于开发者的。...然而,这个链条中每个元素都有可能是空值,因此都是可空类型。所以,下面的代码是不能通过编译的: val city = order.customer.address.city // 编译错误!...这里我也要发表自己的意见: 类和方法默认为 final :是的,这种设计意图是在社区引起了激烈的争议。但是对于我来说,这在日常工作中并不是什么大问题。

    1.4K30

    用 Map 为你的属性做代理

    微信公众号 Kotlin 是去年 10 月底开的,到现在,每周最少一篇文章的节奏,把我能想到的的一些关于 Kotlin 的好玩的东西都记录下来告诉大家,结果,我发现一个严重的问题:题目越来越难找了。...不瞒各位说,Preference 这个类的源码来自于《Kotlin for Android Developers》这本书,我在初学 Kotlin 的时候一下子就被这个特性惊艳到了,有这样好用的扩展,请问你还有什么理由用...我在前面有篇讲泛型的文章:Kotlin 泛型(修订版) 提到过可变集合与不可变集合的型变,前者是不变的,而后者是协变的,所以 Map 的 getValue 版本的返回值可以是 V 的子类,而 MutableMap...,也就是说找不到的时候返回 null 不就可以了嘛。但事实呢?...>().withDefault { null } ... } 这回如果找不到 key,那么就返回 null,妥妥的了。

    59220

    用kotlin实现activity路由框架的ProcessorProcessor的原理下载安装特性使用方法总结

    换了kotlin以后,好像不行了,于是我用了土方法。...kotlin对for循环进行了优化,起初还可以用map、filter,但是遇到两层for循环好像找不到更好的办法。...如果您有更好的办法,一定要告诉我。 坑3: Kotlin的类没有静态变量。不过有同伴对象(Companion Object)的概念。...如果在某个类中声明一个同伴对象, 那么只需要使用类名作为限定符就可以调用同伴对象的成员了, 语法与Java中调用类的静态方法、静态变量一样。...如果在跳转前需要先做判断,看看是否满足跳转的条件,doCheck()返回false表示不跳转,true表示进行跳转到下一个activity Router.getInstance().open("user

    72820

    Kotlin 机制你都了解吗?

    什么是 kotlin? ---- kotlin 是静态类型的编程语言,运行于 jvm 之上。如果在编译时知道变量的类型,则语言是静态类型的,在运行时知道变量类型,则语言是动态类型。 2....在某个类中,如果某些成员变量没办法在一开始就初始化,并且又不想使用可空类型(也就是带?的类型)。那么,可以使用 lateinit 或者 by lazy 来修饰它。...首先伴生对象中的代码是在类加载时就会执行。init代码块中的方法会按顺序放在主构造函数中,主构造函数中原来的代码会在后面执行。 9. const 和 val 有什么区别?...) 转成 java 类,知道为什么 Kotlin 开发强大了吧。...如果这些函数中的任何一个在类体中显式定义或继承自其基类,则不会自动生成该函数。如果变量是 val 修饰,只会生成 get 方法。 11. 什么是 Range 操作符?

    80430

    我为何早先于你学习并应用Kotlin

    其实,非科班出生的我早已经在 Kotlin 1.0 版本发布之后的不久就开始学习并使用上了,什么都比你晚,但是今天我第一次感觉自己站在了更高的位置(应该摔得更疼),或许我们应该是时候改变一下自己因循守旧的思维模式了...Clojure ,我觉得学习一门语言就应该有所比较,对它的历史也要有点认知,相比强大的 Scala , Kotlin 的学习曲线很缓,适合新手的我!...为什么我起步晚但学习 Kotlin 却比有些人早? 是偶然吗?我看未必。...技术行业其实也不例外,如同服装流行元素一样,如果你想掌握先机的话,你必须先去国外了解最新的相关行业动态。怎么了解?还是搜索!而且要用英语搜索!...同时,我在用 Google 搜索文章并阅读后总能额外了解到一些新知识,虽然是浅尝辄止,但并不影响我对新生事物的初识:我不会放过好文章中的一些专有名词以及相关技术。

    91030

    记一次inline使用不当导致编译期Null指针的排查过程

    但是一旦改完之后,没有 build ,那么这就是一个隐藏的坑,严重一点可能会导致你好几个小时找不到原因。...难道不应该直接搜索如何打印完整的 build 日志吗,然后通过日志查看到底在哪一步失败了,于是刚好想起了前几天同学也发现过这样的问题,直接去问他。...对比转换后的java代码,结果也是报错,也没有什么可奇怪的。 于是接连测试了下: 结果也很简单。...,其是Kotlin提前定义好的。...但是现在,obj函数对象 可能为 null,即编译器没法确定了,编译器不知道这里到底应该复制什么玩意,如果不复制,那还怎么优化,但怎么复制,你都是 null 的,我怎么知道呢,所以直接 null 指针了

    46030

    Kotlin 学习笔记(二)

    Kotlin 数据类 Kotlin 语言中有个特殊的类叫 数据类,这个类型是 Kotlin 专门用来表示一个 Java Bean 的,为啥这么说?因为它帮我们自动生成了一个数据类应该有的方法。...当然,如果在声明的时候就知道集合里的元素,就可以使用这些函数进行初始化: // code 8 val list = listOf("a", "b", "c", "d") // 不可变集合声明 val...的声明: // code 10 val array = Array(, { it + }) // 初始化长度为 5 的数组 [1,2,3,4,5] array[] = // array 可修改元素值...而且更好用,比如 Kotlin 不用 flatMap ,自动就将集合中的元素拆成一个个的了,filter 里面的 it 就是代表的集合中的一个个的元素。...{ it == "2" }.also { println(it) // 输出:null } // 6、any :集合中任意一个元素若满足条件,则返回 true;否则返回 false

    63410

    如何在Java和Swift中避免空引用异常?

    Optional Chaining 如果在不保证返回非空值的方法上使用Optionals作为返回类型,则上述实现也可以写成: 第二个实现的代码也第一个实现也好的很有限。...例如,如果我们在内存中已经有一个用户集合,我们想在进入存储库之前搜索这个集合,那么我们可以做以下工作: Optional.stream允许将可选的转换为至多一个元素的流。...Kotlin's 语言中Null类型安全 与Java不同的是,Kotlin语言的类型系统支持可空类型,这意味着除了数据类型的通常值外,还可以表示特殊值null的类型。默认情况下,所有变量都是不可空的。...要声明一个可空变量,声明的类型后面应该有一个问号。 var user : User = null // 不能编译,User是可空类型 var nullableUser : User?...Nullable Chaining 与Java中的Optionals 一样,Kotlin中的可空值也可以通过使用例如null-safe调用操作符进行链接。

    2.7K30

    解决thrifty-compiler.jar运行报错不能编译IDL生成java class代码问题

    为什么Microsoft会重复制造轮子,开发一个android版本的thrift呢?...我还没有尝试,但根据它的依赖库我推测轻量版本的thrifty并没有依赖android平台的独有的API,所以应该也是可以在PC平台的JVM中运行的。...task用于生成thrifty-compiler的Faj-Jar,所以要想得到可执行的thrifty-compiler.jar,最直接的办法就是下载thrifty的源码,执行shadowJar任务编译出可命令行执行的...然后还要将bin子文件添加到PATH搜索路径(Windows平台)。...Java 8 required 如果在执行项目编译时报错,说明你的环境变量中设置的JAVA_HOME指向的Java 7,而kotlin编译器要求Java 8,所以你需要修改JAVA_HOME环境变量,将

    1.3K10

    kotlin修炼指南9-Sequence的秘密

    在可迭代处理中,我们取第一个操作,并将其应用于整个集合,然后转到下一个操作。他们是一步一步被执行的。...比方说,我们有一个有数百万个元素的集合,在处理之后,我们只需要取前10个。为什么要处理其他所有的元素呢?Iterable处理没有中间操作的概念,所以整个集合的处理就像在每个操作上都要返回一样。...但这种差异仍然是不可忽视的,这也是为什么我们更愿意使用Sequence来处理超过一个处理步骤的大集合的主要原因。 我所说的 "大集合 "是指许多元素和真正的大集合。它可能是一个有几万个元素的整数列表。...尽管Kotlin开发者应该记住它的缺陷,特别是它不能用于无限Sequence。...我的建议是很少使用Java流,只在计算量大的处理中使用,这样可以从并行模式中获益。否则,使用Kotlin stdlib函数,以获得同质化的、干净的代码,可以在不同的平台上或共同的模块上使用。

    55620

    IDEA 2021年首个新版本发布,重要更新速览

    您可以在搜索范围内包含或排除指定的外部依赖项。 官方标记了多个 UI 与 gutter 元素,现在您可以使用屏幕读取器正确读取这些元素了。...UML 类图现可用于编译为 JVM 的 Kotlin 代码。 IntelliJ IDEA 自己的代码覆盖运行器现在可全面支持 Kotlin 的内联函数与协同程序。...IntelliJ IDEA 调度器现可在 Kotlin 中评估 get 表达式,并将其显示在 Varaiables 视图当中。...Swagger 现可支持带有外部文件引用($ref)的规范,并在 Structure 视图中为规范文件提供更多节点。 添加了新的实验工具,用于检测 Web 应用程序中的 DOM 元素。...:年薪 40W Java 开发是什么水平? 推荐? :Github掘金计划:Github上的一些优质项目搜罗 我是 Guide哥,拥抱开源,喜欢烹饪。

    1.7K40
    领券