gpt4 book ai didi

kotlin - 为什么公共(public)内联函数可以调用私有(private)构造函数

转载 作者:行者123 更新时间:2023-12-01 04:46:31 30 4
gpt4 key购买 nike

我的类有一个私有(private)构造函数,并在伴随对象上实现了某种“通用构造函数”的调用

class Test private constructor(className: String) {
companion object {
// If I remove the internal it fails
internal inline operator fun <reified T> invoke(): Test {
return Test(T::class.java.name) // why can I even call it? The constructor is private
}
}
}

我什至可以有一个调用通用构造函数的公共(public)内联函数
public inline fun test() = Test<Any>() // Why can I call it, it is internal

这不应该意味着每次调用 test()扩展到 Test(Any::class.java.name)即使该构造函数是私有(private)的?

所以我的问题是:
  • 为什么可以internal inline fun调用私有(private)构造函数? (公共(public)乐趣不能)
  • 为什么可以public inline fun调用内部函数?
  • 为什么我最终可以在 public inline fun 中公开私有(private)构造函数? ?
  • 最佳答案

    • Why can that internal inline fun call a private constructor? (a public fun couldn't)


    一个 internal inline 函数可以访问非公共(public)API,因为它只能在同一个模块中调用,因此它不会遭受API更改并且调用模块未重新调用时可能引入的二进制不兼容问题编译(见 docs )。仅公共(public) API inline 函数禁止此类调用。

    • Why can that public inline fun call an internal function?


    这是一个错误。通常,公共(public) inline 函数无法访问非公共(public) API。似乎没有为 invoke() 运算符(operator)调用检查此规则。我已经提交了问题: KT-20223

    • And why can I ultimately expose a private constructor in a public inline fun?


    这是由于第一点中的预期行为和第二点中的错误的组合。归根结底,这也是一个错误。

    关于kotlin - 为什么公共(public)内联函数可以调用私有(private)构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46176200/

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