我是Kotlin的初学者,最近读过有关密封课程的内容.但是从文档来看,我实际得到的唯一想法是它们存在.
该文件指出,他们"代表受限制的阶级等级制度".除此之外,我发现了一个声明,他们是超级大国的枚举.这两个方面实际上都不清楚.
那么你可以帮我解决以下问题:
更新: 我仔细检查了这篇博客文章,仍然无法理解这个概念.正如帖子中所述
效益
该功能允许我们定义在类型中受限制的类层次结构,即子类.由于所有子类都需要在密封类的文件中定义,因此编译器不了解未知子类的可能性.
为什么编译器不知道其他文件中定义的其他子类?即使IDE知道这一点.Ctrl+Alt+B
例如,只需在IDEA上按下List<>
定义,即使在其他源文件中也会显示所有实现.如果某个子类可以在某个第三方框架中定义,而该应用程序中未使用该框架,我们为什么要关心它?
我没有太多的多线程经验.所以不确定我是否正确使用从Kotlin反编译的以下Java代码.
这是Kotlin代码:
companion object {
@Volatile private var INSTANCE: SomeDatabase? = null
fun getInstance(context: Context): SomeDatabase =
INSTANCE ?: synchronized(this) {
INSTANCE ?: buildDatabase(context).also { INSTANCE = it }
}
}
Run Code Online (Sandbox Code Playgroud)
这是Java中的反编译代码:
SomeDatabase var10000 = ((SomeDatabase.Companion)this).getINSTANCE();
if (var10000 == null) {
synchronized(this){}
SomeDatabase var4;
try {
var10000 = SomeDatabase.Companion.getINSTANCE();
if (var10000 == null) {
...
var10000 = var4;
}
return var10000;
Run Code Online (Sandbox Code Playgroud)
这是不是意味着代码实际上没有同步,因为空块synchronized(this){}
?
我刚刚开始练习 Groovy,我有一个与地图和 IDEA IDE 相关的问题。
Integer
当我尝试用作地图的密钥时,为什么 IDEA 会显示以下通知?这个简单的 Groovy 脚本运行良好并打印正确的结果。
list = [4, 7, 3, 7, 7, 1, 4, 2, 4, 2, 7, 5]
map = [:]
list.each {
t = map[(it)]
map[(it)] = t != null ? t + 1 : 1
}
map.each {key, value -> if (value == 1) println key}
Run Code Online (Sandbox Code Playgroud) 最近我一直在寻找hashCode()
Java API 中方法的良好实现,并查看Integer
源代码.没想到,但hashCode()
刚刚返回支持的int
价值.
public final class Integer ... {
private final int value;
...
public int hashCode() {
return Integer.hashCode(value);
}
public static int hashCode(int value) {
return value;
}
Run Code Online (Sandbox Code Playgroud)
这很奇怪,因为有很多论文和页面以及专门用于解决这个问题的软件包 - 如何设计好的哈希函数来分配值.
最后我得出了这个结论:
Integer
是与键一起使用的最差数据类型候选者HashMap
,因为所有连续键都将位于一个bin/bucked中.就像上面的例子一样.
Map<Integer, String> map = HashMap<>();
for (int i = 1; i < 10; i++) {
map.put(Integer.valueOf(i), "string" + i);
}
Run Code Online (Sandbox Code Playgroud)
有两个问题,谷歌搜索时没有找到答案:
Integer
数据类型的结论是否正确?Integer's hashCode()
在使用电源操作,素数,二进制移位时,方法不能以某种棘手的方式实现?有一个变量:
var itemDecorators: MutableList<ItemDecorator>? = null
Run Code Online (Sandbox Code Playgroud)
在函数的最开始,我正在尝试执行以下操作:
private fun draw(c: Canvas, rv: RecyclerView, vh: ViewHolder) {
val decorators = itemDecorators ?: return
if (decorators.isEmpty()) return
Run Code Online (Sandbox Code Playgroud)
是否有可能在Kotlin中将最后两行重构为一个语句,即检查是否为null
空,检查是否为空,然后分配,否则return
?