为什么kotlin允许声明变量与方法中的参数同名?有没有办法访问'隐藏'参数呢?
例:
fun main(args: Array<String>) {
val args = Any()
}
Run Code Online (Sandbox Code Playgroud)
mie*_*sol 10
Kotlin会发出关于名称阴影的警告,您可以使用以下方法来抑制:
@Suppress("NAME_SHADOWING")
val args = Any()
Run Code Online (Sandbox Code Playgroud)
在某些情况下允许这样的阴影可能很方便,例如在参数验证后抛出自定义异常:
fun sample(name: String?) {
@Suppress("NAME_SHADOWING")
val name = name ?: throw CustomArgumentRequiredException()
println(name.length)
}
Run Code Online (Sandbox Code Playgroud)
遗憾的是,无法访问阴影变量.
此刻也无法将警告变为错误.
这称为阴影,对于将代码与系统其他部分解耦很有用。可能是因为名称绑定到当前作用域。
考虑一下:
您Foo从其他人继承了一个类,比如说一个API。在代码中,您将引入一个变量bar。的作者Foo还更新了他的代码,还添加了一个变量bar。没有本地范围,您将发生冲突。
顺便说一下,这在包括Java在内的其他JVM基本语言中也是可能的,并且通常在构造函数或设置方法中使用:
public TestClass(int value, String test) {
this.value = value;
this.test = test;
}
public void setFoo(String foo) {
this.foo = foo;
}
Run Code Online (Sandbox Code Playgroud)
阴影不仅适用于参数,其他事物也可以阴影:字段,方法甚至类。
大多数IDE都会警告您有关阴影的信息,因为它可能会造成混淆。
对我们自己的代码的建议:
尝试避免出现阴影有两个原因:
| 归档时间: |
|
| 查看次数: |
4206 次 |
| 最近记录: |