什么';Kotlin的宗旨是什么;s内在的'areEqual'方法?
假设我有一个什么';Kotlin的宗旨是什么;s内在的'areEqual'方法?,kotlin,compiler-construction,language-design,Kotlin,Compiler Construction,Language Design,假设我有一个 data class Eq(x: Int?) 这将生成一个类似以下内容的equals方法 public boolean equals(Object other){ if(this == other) return true; if(!(other instanceof Eq)) return false; Eq otherEq = (Eq) other; return Intrinsics.areEqual(this.x, otherEq.x);
data class Eq(x: Int?)
这将生成一个类似以下内容的equals
方法
public boolean equals(Object other){
if(this == other) return true;
if(!(other instanceof Eq)) return false;
Eq otherEq = (Eq) other;
return Intrinsics.areEqual(this.x, otherEq.x);
}
内在的
public static boolean areEqual(Object first, Object second){
return first == null ? second == null : first.equals(second);
}
我不太明白这背后的动机
与内联其实现相比,保留静态调用有什么好处?通过将
Intrinsics.areEqual
保留为一个单独的函数,在重写equals
时仍然可以使用它
Kotlin本身在多个地方使用了这种方法,例如,在中,保持内在作为静态方法,而不是在每个使用站点将其内联,有几个优点:
- 它不会炸毁生成的二进制文件。对于大多数内部函数,字节码中的方法调用比内联体更小。因此,内联内部文件将导致生成的二进制文件大小的增长
- 内在的实现在语言进化过程中受到控制,并且在所有调用站点上保持一致。由于内在函数是作为一种方法保留的,较新的运行库可能会提供更好的实现,可以同时应用于所有调用站点,而不是内联不同版本的不同二进制文件