Kotlin是否允许扩展现有类型?

Ole*_*Ole 4 javascript java kotlin

Kotlin支持扩展现有类型.例如,我们可以这样做:

fun String.replaceSpaces(): String {
    return this.replace(' ', '_')
}

val formatted = str.replaceSpaces()
Run Code Online (Sandbox Code Playgroud)

但是javascript 这是一个反模式.

Kotlin是否回避了Javascript导致的问题?

Jon*_*lms 7

不,这不是反模式.在js中它是一个反模式,因为js是动态的,因此更改原型会改变代码在运行时的工作方式,使其成为反模式.根据in运算符的工作方式以及基于可以重写所有内容的事实,这也非常危险,因此更改原型会影响页面上的某些代码:

Number.prototype.toString = function(){
 return "bullshit";
};

alert(""+12);
Run Code Online (Sandbox Code Playgroud)

在kotlin中,情况并非如此,因为kotlin是静态的,并且所有引用都是在编译时构建的.此外,您无法覆盖现有方法,因此它根本没有危险.