小编Pie*_*lli的帖子

有没有办法在Kotlin中隐藏Java方法?

我正在学习Kotlin,现在我正在阅读Kotlin in Action。阅读有关扩展功能和标准库改进的章节,我了解了String.splitJava和Kotlin之间的重载所暴露出的不同行为:我认为在基于定界符和基于正则表达式之间进行显式且更多类型指导的分离是一个很好的主意。超载。

关于这一点,我在上面提到的那本书说Kotlin隐藏了令人困惑的方法,并提供了替换的几个split具有不同参数的重载扩展作为替换

扩展功能响应问题“如何向现有类添加方法”;另一方面,我无法弄清楚如何隐藏 Java标准库提供的方法

我做了一些尝试,编写了简单的代码,然后发现

  1. val ks = "Pietro Martinelli" 拥有 ks::class.qualifiedName == "kotlin.String"
  2. val ks = "Pietro Martinelli" 拥有 ks::javaClass.name == "java.lang.String"
  3. 将上述值ks传递给Java方法时,接收到的参数x具有x.getClass().getName() == "java.lang.String"(按预期)
  4. String js = "Pietro Martinelli"(使用Java代码)具有js.getClass().getName() == "java.lang.String"预期的
  5. 将上面的js值传递给Kotlin方法时,接收到的参数y具有y::class.qualifiedName == "kotlin.String"y.getClass().getName() == "java.lang.String"(到目前为止已达到预期)

所以:当我在Kotlin中使用值以及从Kotlin到Java来回往返时,似乎(让我说)发生了一些魔术String。如果我对它的理解不正确,那么StringKotlin中的文字是的实例,kotlin.String但它们绑定到Java类型,该Java类型透明地用于Java方法调用。这样Kotlin库可以 …

java extension-methods kotlin

5
推荐指数
1
解决办法
292
查看次数

标签 统计

extension-methods ×1

java ×1

kotlin ×1