- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试使用 @JvmOverloads 为 Kotlin 函数创建重载方法。出于好奇,我尝试查看字节码和反编译的 Java 代码。但是,我无法理解 Java 代码。
这里是一个简单的 Kotlin 代码
class MyClass {
@JvmOverloads
fun doSomething(a : Int = 200, b : Int = 300){
}
}
下面是反编译的java代码:
public final class MyClass {
@JvmOverloads
public final void doSomething(int a, int b) {
}
// $FF: synthetic method
// $FF: bridge method
@JvmOverloads
public static void doSomething$default(MyClass var0, int var1, int var2, int var3, Object var4) {
if((var3 & 1) != 0) { // What does this do ?
var1 = 200;
}
if((var3 & 2) != 0) { //Where did var3 come from ?
var2 = 300;
}
var0.doSomething(var1, var2);
}
@JvmOverloads
public final void doSomething(int a) {
doSomething$default(this, a, 0, 2, (Object)null);
}
@JvmOverloads
public final void doSomething() {
doSomething$default(this, 0, 0, 3, (Object)null);
}
}
请解释或向我指出正确的资源,这可以帮助我了解更多相关信息。谢谢。
最佳答案
var3
是一个位掩码,指示哪些参数需要用默认值替换。如果设置了位 0,则第一个参数( var1
或源代码中的 a
)将替换为默认值 200。如果设置了位 1,则 var2
采用默认值 300。1 参数重载传递 2 作为位掩码(因此仅设置位 1),0 参数重载传递 3(设置位 0 和 1)。
关于java - 解释在 Kotlin 方法上使用 @JvmOverloads 生成的 Java 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52411108/
为什么禁止从具有默认参数的类主构造函数自动生成许多对 Java 可见的构造函数? @JvmOverloads class Video(private val id: Long, val ownerId
当我们像这样用 Kotlin 创造乐趣时 fun foo(bar: Int = 0, baz: Int) { /* ... */ } foo(baz = 1) // The default value
我的代码库是混合的 java 和 kotlin 代码。我想在带有默认参数的接口(interface)方法上使用@JvmOverloads。像这样: @JvmOverloads fun getClien
我尝试使用 @JvmOverloads 为 Kotlin 函数创建重载方法。出于好奇,我尝试查看字节码和反编译的 Java 代码。但是,我无法理解 Java 代码。 这里是一个简单的 Kotlin 代
我试图通过将两者都定义为顶级乐趣和伴随对象静态乐趣来实现这一点,但我得到了相同的结果。我能够看到生成的方法,但没有用于 newInstance(mouse: Mouse?) 的方法,我对如何从 Jav
我是一名优秀的程序员,十分优秀!