我读到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})
时,这与我的第一句话矛盾吗?
答案 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。