interface - Kotlin 接口与 Java 接口的相关性
问题描述
我正在使用 Kotlin 中的集合进行练习,但无法理解接口的行为。这是我的问题的背景:
public interface List<out E> : Collection<E> {...}
public interface MutableList<E> : List<E>, MutableCollection<E> {...}
List
并且MutableList
是在 Kotlin 中定义的接口,很容易理解。现在,如果我想获取 List 的实例,可以使用这些方法:arrayListOf()
或mutableListOf()
. 两种方法使用相同typealias
,实际上是链接到Java实现的ArrayList
。
public typealias ArrayList<E> = java.util.ArrayList<E>
这里有个神秘的东西,MutableList
在 Kotlin 中没有实现,那么 Kotlin 怎么知道 java.util.ArrayList 可以赋值给MutableList
变量呢?换句话说,Kotlin 和 Java 接口是如何相互关联的?
解决方案
Kotlin 中的接口与 Java 接口是一对一的关系。MutableList
和其他集合接口是一个例外;它们由编译器以特殊方式处理,以支持只读和可写集合接口之间的分离。
推荐阅读
- python-3.x - Numpy 没有将正确的数组插入多维数组
- python-3.x - 如何在枚举声明中获取值的名称?
- javascript - 检查来自 promise 的 JSON 对象是否为空
- php - Laravel 5.2:在 Chrome 上修改 Iframe 表单时出现 TokenMismatchException?
- android - 类库项目中的字符串编码
- javascript - useState 不重新渲染组件
- unity3d - 你什么时候乘以 Unity 中的 Time.deltaTime?
- ios - 从容器 VC 中确定子 VC 内容的高度,并使用它来调整容器 vc 的大小?
- c# - 如何在 C# 中将字符串转换为长度为 4 的字符?
- iis - IIS - Cors 模块 - IIS 8.5