gpt4 book ai didi

kotlin - "private"时无法在 Kotlin 中返回字符串

转载 作者:行者123 更新时间:2023-12-04 19:31:36 24 4
gpt4 key购买 nike

为什么当我公开 userName 时出错:

Error:(2, 5) Kotlin: Platform declaration clash: The following declarations have the same JVM signature (getUserName()Ljava/lang/String;): fun (): String defined in User fun getUserName(): String defined in User

Error:(4, 5) Kotlin: Platform declaration clash: The following declarations have the same JVM signature (getUserName()Ljava/lang/String;): fun (): String defined in User fun getUserName(): String defined in User

但是我让用户名是私有(private)的,但工作正常

 class User{
/*private*/ var userName: String = "Emily"

fun getUserName(): String{
return userName
}
}

fun main(args: Array<String>){
val User = User()
print(User.getUserName())
}

最佳答案

通过将您的 userName 属性设置为 public,Kotlin 将创建相应的 getUserName()setUserName() 函数为你。当它执行此操作时,编写您自己的 getUserName() 是多余的 - 具有相同签名的相同函数实际上出现了两次 - 编译器不允许这样做。

如果您希望userName 字段是一个公共(public)属性(带有生成的getter 和setter),那么您不能也自己编写getter。这就足够了:

var userName: String = "Emily"

如果你想让 userName 有一个 public getter 和一个 private setter(这看起来像你想要的),这是 Kotlin方法:

var userName: String = "Emily"
private set

最后,您仍然可以在属性上创建自定义访问器(例如,如果您想要额外的逻辑,例如将其返回为小写)。 Kotlin 的方法如下所示:

private var _userName: String = "Emily"
var userName: String
get() = _userName.toLowerCase()
set(value) { _userName = value }

另请注意,您访问该属性的方式会有所不同,具体取决于您是从 Kotlin 还是 Java 访问它。在 Kotlin 中,您只需编写 user.userName,但在 Java 中,您需要编写 user.getUserName()

关于kotlin - "private"时无法在 Kotlin 中返回字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49056544/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com