在Java/Kotlin中实例化接口
我读到Java中的接口不能被实例化——它们只能由类实现或由其他接口扩展 然而,我可以完美地书写:在Java/Kotlin中实例化接口,java,kotlin,Java,Kotlin,我读到Java中的接口不能被实例化——它们只能由类实现或由其他接口扩展 然而,我可以完美地书写: val set = setOf<String>("one", "two") 在Kotlin中,集合为集合类型 当我实例化集合时,这与我的第一个语句是否矛盾 我读到Java中的接口不能被实例化——它们只能由类实现或由其他接口扩展 这意味着你不能写作 Set<String> set = new Set<String>(...); 这也是不允许的 尽管Kotlin故
val set = setOf<String>("one", "two")
在Kotlin中,集合为集合类型
当我实例化集合时,这与我的第一个语句是否矛盾
我读到Java中的接口不能被实例化——它们只能由类实现或由其他接口扩展
这意味着你不能写作
Set<String> set = new Set<String>(...);
这也是不允许的
尽管Kotlin故意模糊了构造函数和方法之间的界限;它与标准库中的其他类型完全一致,可以定义一个名为Set的工厂方法,该方法将以相同的方式调用,或者在伴随对象中定义一个操作符fun调用。有关示例,请参见 该函数返回一个Set类型的对象,但该对象的实际类型来自实现Set的类,如HashSet或其他。这使您的代码独立于实际的Set实现,从而赋予Set权力,例如,根据参数给出不同的实现。两种常见的方法是返回一个特殊的空集,或者出于性能原因返回一个只包含一个元素的特殊集合。另外,Kotlin标准库可以在不破坏用户代码的情况下更改set实现。提示:如果按住ctrl键单击或按住Cmd键单击setOf,您将导航到该函数的实现,从而了解它的功能。@JBNizet:查看该实现可能很有用,但也可能很危险,因为实现可以改变,不应该依赖。特别是,我认为有人在谈论arrayOf和/或setOf为小集合返回新的专业类。@gidds我不鼓励OP依赖setOf的具体实现。我鼓励hm/她查看代码,以便能够回答他/她自己的问题,并了解OO。
val set = Set<String>(...)