Kotlin 是否支持类似于 Swift 中的协议组合的接口组合或未来有计划吗?

2024-03-19

到目前为止我发现的答案可能是否定的,但我想知道未来是否有任何计划支持此功能。这是 Swift 中的样子。

协议组合的形式为 SomeProtocol & AnotherProtocol。您可以根据需要列出任意多个协议,并用与号 (&) 分隔它们。除了协议列表之外,协议组合还可以包含一种类类型,您可以使用它来指定所需的超类。

protocol Named 
{
    var name: String { get }
}

protocol Aged 
{
    var age: Int { get }
}

func wishHappyBirthday(to celebrator: Named & Aged) 
{
    print("Happy birthday, \(celebrator.name), you're \(celebrator.age)!")
}

您无法在 Kotlin 中显式定义交集类型,但可以使用泛型类型约束在函数参数中实现它。像这样:

interface Named {
    val name: String
}

interface Aged {
    val age: Int
}

fun <T> wishHappyBirthday(celebrator: T) where T : Named, T : Aged {
    println("Happy birthday, ${celebrator.name}, you're ${celebrator.age}!")
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Kotlin 是否支持类似于 Swift 中的协议组合的接口组合或未来有计划吗? 的相关文章

  • 如何在 Swift 4 中传递 Encodable 或 Decodable 作为参数?

    我正在学习 JSONParsing 我遵循了教程 得到的是这样的 guard let url URL string http localhost test api public api register else return var re
  • Swift:HackerRank readLine 一个 Int 数组

    我正在玩 HackerRank 我需要从行读取整数数组的问题之一 A 1 2 3 B 1 4 7 I tried let line readLine print line 但我收到这个错误 solution swift 2 7 warnin
  • Swift 中的运行时错误处理

    我完全知道 Swift 没有 try catch 机制来捕获异常 好吧 Swift 2 0 现在支持它们 我还了解到 许多 API 方法都会返回一个 NSError 如果出现问题 该错误对象将被填充为错误对象 所以请不要向我指出这个问题 S
  • for循环中的范围是什么类型?

    当我们写下以下内容时 for i in 1 10 do stuff 我想知道什么类型有范围1 10在函数调用中使用它 例如 myFunc 1 10 如果在定义后放置断点let range 1 lt 10 你会发现它实际上不是一个Range结
  • 为什么 UICollectionView didSelect 方法不起作用?

    我已经创建了我的UICollectionView以编程方式 在这种情况下我的didSelectItemAtIndexPath方法根本不调用 let collectionView UICollectionView frame CGRect x
  • 在 Swift 中向 UIButton 添加字符串属性

    如何将字符串属性与UIButton在斯威夫特 我不希望该字符串显示为按钮文本 而只是将其作为标识符或键分配给按钮 这是我到目前为止所拥有的 func createAnswerButtons var index Int for index 0
  • Xcode 8 beta“错误”对于这种情况下的类型查找不明确

    根据这篇文章 我需要指定模块来查找对象类型 在此上下文中 方法 对于类型查找不明确 Alamofire 中的错误 https stackoverflow com questions 33543597 method is ambiguous
  • 扩展可能不包含存储的属性,但为什么允许静态

    扩展不能包含存储属性 但是为什么扩展中可以定义静态存储属性呢 我也没有找到任何文档提到扩展中允许静态属性 extension String static let test Test static var test2 Test2 扩展名不能包
  • Kotlin 数据类中的函数作为参数会导致解析错误

    我有一个 Kotlin 帽子中的数据类正在使用 Parcelize注释以方便分割 问题是我现在想将一个函数传递给此类 但我真的不知道如何使该函数在打包过程中不被考虑 这是我的数据类 Parcelize data class GearCate
  • 在 Swift 中获取 UIImage 的主颜色

    我正在尝试在 Swift 中获取 UIImage 的主颜色 并尝试移植这段代码 https stackoverflow com questions 13694618 objective c getting least used and mo
  • 如何在 SwiftUI 中将阴影应用于内部视图?

    我在周围添加了阴影VStack其中包含我的两个文本字段和一个提交按钮 然而 阴影也被应用到了文本框内的两个文本字段 VStack 我在这里缺少什么导致这种情况发生吗 我尝试添加shadow radius 0 在文本字段上 但它不会改变任何内
  • Firestore 更新后仅获取文档一次

    我有一个 tableView 它从 Firestore 集合中获取所有文档 并且我只想在用户刷新 tableView 后将最后一个文档添加到 Firestore 时获取一次 然后我想删除侦听器 以便当用户刷新 tableView 时仅获取文
  • 检查定位服务是否开启

    我一直在对 CoreLocation 进行一些研究 最近 我遇到了一个在其他地方 但在 Objective C 和 iOS 8 中 已经讨论过的问题 我觉得问这个问题有点傻 但是如何在 iOS 9 上使用 swift 检查是否启用了位置服务
  • 如何访问与枚举类中每个枚举常量关联的每个 SerialName?

    我有一个数据类 我想使其可序列化 data class ClassTemp val str String val tmp Temp Serializable enum class Temp SerialName Serial Name 1
  • SwiftUI 列表与右侧的部分索引?

    是否可以有一个在右侧有索引的列表 就像下面 SwiftUI 中的示例一样 我在 SwiftUI 中做了这个 Contacts swift TestCalendar Created by Christopher Riner on 9 11 2
  • 如何使用 NSUserDefaults 在 Swift 中存储自定义类的数组?

    我有一个名为的自定义类Person当某人输入信息时 它会存储有关某人的各种属性 class Person Person dictionary variable var name String var age String var html
  • 减少 CoreData 的调试输出?

    我正在开发一个使用 CoreData 的 iOS macOS 项目 它工作正常 但它会向控制台输出大量调试信息 这使得控制台无法使用 因为我的打印语句隐藏在所有与 CoreData 相关的内容中 我有一个非常简单的 CoreData 设置
  • Swift:使具有相同“形状”的两种类型符合通用协议

    我有两种不同的类型 它们代表相同的数据 并且具有完全相同的 形状 这两种不同的类型是代码生成的 我被迫处理它们 但是 我想让它们符合一个通用的协议 这样我就可以对这两种类型一视同仁 这是一个例子 假设这是我所坚持的两种代码生成类型 stru
  • 如何让按钮闪烁?

    我试图在扫描正确时将按钮的颜色 只是闪烁 闪烁 更改为绿色 在出现问题时将按钮的颜色更改为红色 我可以用这样的视图来做到这一点 func flashBG UIView animateWithDuration 0 7 animations s
  • Xcode 8 / Swift 3:“UIViewController 类型的表达式?未使用”警告

    我有以下函数 它之前编译得很干净 但在 Xcode 8 中生成警告 func exitViewController navigationController popViewController animated true UIViewCon

随机推荐

  • 在 C++ 中将 HTTP 响应正文与标头分离

    我目前正在为某个项目编写自己的 C HTTP 类 我正在尝试找到一种方法将响应正文与标头分开 因为这是我需要返回的唯一部分 如果您不熟悉 这里是原始 http 标头的示例 HTTP 1 1 200 OK Server nginx 0 7 6
  • 如何对不同形状使用同一组修改器

    作为我学习 SwiftUI 项目的一部分 我做了一些形状旋转 下面有代码 我想知道如何避免每个形状使用相同的三行修饰符 func getShape shape Int i Int gt AnyView switch shape case 0
  • 为什么当我“使用”BinaryReader 对象时我的 FileStream 对象被释放?

    考虑以下函数 private int GetSomethingFromFile FileStream fs using BinaryReader br new BinaryReader fs fs Seek 0 SeekOrigin Beg
  • 线程和多处理模块之间有什么区别?

    我正在学习如何使用threading和multiprocessingPython 中的模块可并行运行某些操作并加速我的代码 我发现这很难 也许是因为我没有任何理论背景 来理解threading Thread 对象和一个multiproces
  • 如何检查可见 DOM 中是否存在元素?

    如何在不使用getElementById method 我已经设置了一个现场演示 http jsbin com apawi5 3以供参考 我还将在这里打印代码
  • 如何在 python 中实现“#ifdef”?

    编程于C我曾经有代码部分仅用于调试目的 记录命令等 通过使用这些语句可以完全禁用生产 ifdef预处理器指令 如下所示 ifdef MACRO controlled text endif MACRO 做类似事情的最好方法是什么python
  • 神经网络立即过拟合

    我有一个带有 2 个隐藏层的 FFNN 用于几乎立即过拟合的回归任务 epoch 2 5 取决于 个隐藏单元 ReLU Adam MSE 每层相同的隐藏单元数 tf keras 32 个神经元 128 个神经元 我将调整隐藏单元的数量 但为
  • Q_PROPERTY:成员与读/写

    我正在阅读 Qt 5 5 关于 Q PROPERTY 宏的文档 但我不能很好地理解它 据我所知 您可以在此宏中使用关键字 MEMBER 或访问器 READ WRITE 来代替 如果您使用关键字 MEMBER 则不必编写访问器 因为您可以使用
  • 如何重新编译Google Drive API sdk?

    这是我们的问题 如何在dotnet中重新编译Google Drive api sdk gt 我们没有找到源代码 gt 在二进制包中 有一个源文件未随项目一起提供 我们不知道如何处理它 提问原因 在 dotnet 中 我们无法使用从 Goog
  • mysqlnd_ms 错误 - getaddrinfo 失败,mysqlnd_global_stats 未知

    我正在尝试设置 mysqlnd ms 以便它达到在从属数据库上读取和在主数据库上写入的目的 但是 当 httpd 重新启动时 我收到此错误 PHP Warning PHP Startup Unable to load dynamic lib
  • ASP.NET Core 中的 IHttpActionResult 和辅助方法

    我正在尝试将我的 web api 2 项目移动到 ASP NET 5 但我有很多不再存在的元素 例如IHttpActionResult or Ok NotFound 方法 或者RoutePrefix 我应该改变每一个IHttpActionR
  • VS2005中如何将静态库项目转换为dll项目

    当我在vs2005中创建一个项目时 我还可以创建 Win32 gt Win32Project 我可以选择 控制台应用程序 或 dll 或 静态库 如果我创建了一个静态库项目 我怎样才能将它转换为dll项目 我在创建的项目的设置面板中找到了
  • MySQL系统数据库表可以转换为InnoDB吗?

    我最近安装了MySQL 5 5 我在用着InnoDB作为我所有数据库的引擎 我注意到mysql数据库默认值及其所有表 用户 数据库等 都是MyISAM 有什么理由他们不能 不应该InnoDB 有谁知道 MySQL 是否需要mysql数据库是
  • 线程内存布局

    我了解进程内存布局的样子 代码 数据 堆 堆栈 但是 我不明白具有多个线程的程序的内存布局究竟是什么样的 毕竟 该进程有一个堆栈 所以我假设所有线程都以某种方式共享相同的堆栈 但这似乎不对 因为每个线程都有自己的堆栈 并且不能保证线程按照调
  • 从 shell_exec() 获取输出和退出状态

    当做类似的事情时 output shell exec command 2 gt 1 收集命令的 stdout 和 stderr output 有没有办法找到命令的退出状态 人们可以将命令输出写入临时文件 然后附加退出状态 但这相当笨重 还有
  • $_SERVER['REQUEST_URI'] 和 header('location: ...') 的任何安全问题;

    我的网站有页眉 页脚和主要内容 如果用户未登录 则对于主要内容 可能会显示登录表单而不是实际内容 在该登录表单上我写了 SERVER REQUEST URI 在会话变量中 SESSION redirect 我的登录表单后处理程序将登录用户
  • Lucene中的geohash索引是如何工作的

    在 lucene space 4 中 我想知道 geohash 索引在幕后是如何工作的 我理解 geohash 的概念 它基本上需要 2 个点 纬度 经度 并创建一个 字符串 哈希 索引只是一个 字符串 索引 r 树或四叉树 还是类似的东西
  • 如何捕获 lambda 表达式内外部变量的值?

    我刚刚遇到以下行为 for var i 0 i lt 50 i Task Factory StartNew gt Debug Print Error i ToString 会导致一系列 Error x 其中大多数x等于50 相似地 var
  • memcpy 在 Linux 中移动 128 位

    我正在 Linux 中为 PCIe 设备编写设备驱动程序 该设备驱动程序执行多次读取和写入来测试吞吐量 当我使用 memcpy 时 最大有效负载TLP https en wikipedia org wiki PCI Express Data
  • Kotlin 是否支持类似于 Swift 中的协议组合的接口组合或未来有计划吗?

    到目前为止我发现的答案可能是否定的 但我想知道未来是否有任何计划支持此功能 这是 Swift 中的样子 协议组合的形式为 SomeProtocol AnotherProtocol 您可以根据需要列出任意多个协议 并用与号 分隔它们 除了协议