简要演示了如何使用一次性和多次使用泛型从Kotlin调用功能接口。
基本
以下是用Java定义的功能接口:
![7dfd002927a03ca5ac9d41fd176b1823.png](https://i-blog.csdnimg.cn/blog_migrate/1e1548e0c3ed526c10a7e80481989c8b.jpeg)
注意,一个接口不需要被注释@FunctionalInterface为一个接口。
在Kotlin中,可以使用以下代码来实现:
![9cb7f8d7495f5e64671804796bc28cd7.png](https://i-blog.csdnimg.cn/blog_migrate/2e96126b88cf35025641a979645f2a77.jpeg)
由于该Executor接口只有一个函数和一个输入参数,因此可以为传递给的lambda分配类型execute。这样就无需将其显式定义为Runnable。这被称为SAM(小号英格尔甲 bstract 中号 ethod)变换,见科特林文档的详细信息。
实现相同目标的更详细的方法如下:
![766b8f1da5d072e462e1724141184a15.png](https://i-blog.csdnimg.cn/blog_migrate/bf6d5a799e7388433f0db7644896d5ff.jpeg)
如果您使用的是Intellij,它将帮助您找到第一个解决方案。
单类型泛型
让我们使其更加令人兴奋,并在本回合中包含一些泛型。使用Java接口和一个函数来调用它:
![9a819ffbfcec856f0cf33cd2a5835ea0.png](https://i-blog.csdnimg.cn/blog_migrate/f214bc641f2ea60ff9ad3655c7cba84a.jpeg)
doStuff可以使用以下Kotlin代码调用该函数:
![a1df5fbdb4ae0e1e92d03e69e2a7674a.png](https://i-blog.csdnimg.cn/blog_migrate/abf964c7bd1f33f066238204c8aa71a5.jpeg)
最简化代码的返回类型取决于lambda的结果,在这种情况下为a String。
多类型泛型
当泛型变得更加复杂时该怎么办?我对示例代码做了一些说明,以证明这一点:
![73ff5f89c40a24ede98c55711bfd0abe.png](https://i-blog.csdnimg.cn/blog_migrate/5c162d63de9c77991e3724a670880566.jpeg)
我实际上很难想到一个示例来演示输入和输出泛型。我认为这段代码很丑陋,不太可能代表真正的代码。尽管如此,它仍然足以作为示例。
要调用此代码,请使用以下代码:
![282125b02db91f2485ae9d1032305b23.png](https://i-blog.csdnimg.cn/blog_migrate/77a9b55a41023f43f92302aaba304f92.jpeg)
实际上,正如我第二次提到的那样,通用输入类型A(B在本示例中)将由外部来源提供。此外,泛型类型将在总体类上指定,或者从一开始就被锁定为特定类型。
点击关注私信小编“资源”即可获得免费的学习资料