我正在研究Immutable收藏的工厂方法.我看到该Set.of()方法有10个varargs重载(相同Map.of()).我真的不明白为什么会这么多.最后,ImmutableCollections.SetN<>(elements)无论如何都会调用该函数.
在文档中我发现了这个:
虽然这会在API中引入一些混乱,但它避免了varargs调用引起的数组分配,初始化和垃圾收集开销.
杂乱的确是值得的性能提升吗?如果是,理想情况下是否会为任何N元素创建单独的方法?
我是的新手Kotlin,所以我有这个界面。
interface User {
var nickName : String
}
Run Code Online (Sandbox Code Playgroud)
现在,我想创建一个PrivateUser实现此接口的类。我还必须实现abstract成员nickName。
通过构造函数非常简单
class PrivateUser(override var nickName: String) : User
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试在类内实现成员时,会Idea生成此代码
class Button: User {
override var nickName: String
get() = TODO("not implemented")
set(value) {}
}
Run Code Online (Sandbox Code Playgroud)
让我困惑的是如何进一步实施它。
我认为标题是不言自明的。因此,假设我有以下代码:
interface A { }
abstract class B { }
class C { }
C c = new C();
System.out.println(c instanceof A); //fine
System.out.println(c instanceof B); // compile error
Run Code Online (Sandbox Code Playgroud)
在这个问题的评论中,我读到:
编译器永远无法知道给定类型是否未实现接口,因为潜在的子类可以实现该接口。
因此,如果interface此方法有效,为什么它不应该适用abstract class?它也应该由其他类进行扩展,因为它本身不能存在。有人可以澄清吗?
更新 编译消息:
错误:(22、28)Java:不兼容的类型:C无法转换为B