在Java / Kotlin中实例化接口

时间:2019-06-02 07:00:28

标签: java kotlin

我读到Java中的“接口无法实例化-它们只能由类实现或由其他接口扩展”。

但是我可以完美地写:

set

在Kotlin中,Set<String>的类型为Set

在实例化 def menu(request): obj = Book.objects.get(id=1) obj = obj.authors.all() else: obj="" return render(request, 'menu.html', {'obj':obj,'numautgors':authors}) 时,这与我的第一句话矛盾吗?

1 个答案:

答案 0 :(得分:0)

  

我读到Java中的“接口无法实例化-它们只能由类实现或由其他接口扩展”

这意味着你不会写

Set<String> set = new Set<String>(...);

(不要与new Set<String> { ... }混淆,后者会创建实现Set的匿名类并实例化该类)。您可以 编写Set.of("one", "two"),尽管该方法仅是在Java 9中添加的。它是一种工厂方法,就像Kotlin setOf一样,不是“实例化接口”。

相当于非法new Set的Kotlin将是

val set = Set<String>(...)

这也是不允许的。

尽管Kotlin故意模糊了构造函数和方法之间的界限;在标准库中定义工厂方法Set的方式与标准库中的其他类型完全一致,该方法将以相同的方式调用,或者在随行对象中使用operator fun invoke。有关示例,请参见List method