Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java/Kotlin中实例化接口_Java_Kotlin - Fatal编程技术网

在Java/Kotlin中实例化接口

在Java/Kotlin中实例化接口,java,kotlin,Java,Kotlin,我读到Java中的接口不能被实例化——它们只能由类实现或由其他接口扩展 然而,我可以完美地书写: val set = setOf<String>("one", "two") 在Kotlin中,集合为集合类型 当我实例化集合时,这与我的第一个语句是否矛盾 我读到Java中的接口不能被实例化——它们只能由类实现或由其他接口扩展 这意味着你不能写作 Set<String> set = new Set<String>(...); 这也是不允许的 尽管Kotlin故

我读到Java中的接口不能被实例化——它们只能由类实现或由其他接口扩展

然而,我可以完美地书写:

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>(...)