我什么时候应该选择顶级 const 还是伴生对象 const?

Art*_*r A 6 android kotlin

我想知道什么时候应该使用顶级 const,什么时候应该使用伴生对象?如果财产是私人的还是公共的,我应该考虑使用什么?

const val URI = "sdfsdfsdf"
Run Code Online (Sandbox Code Playgroud)

或者我应该使用:

companion object {
    const val URI = "sdfsdfsdf"
}
Run Code Online (Sandbox Code Playgroud)

当我们处理可见性时,使用什么重要吗?

jsa*_*mol 7

据 JetBrains 报道

\n\n
\n

建议的做法是永远不要使用对象来创建名称空间,并尽可能使用顶级声明。我们还没有\xe2\x80\x99t 发现名称冲突是一个问题,如果确实发生冲突,可以使用带别名的导入来解决它。

\n
\n\n

因此,基于此,您最初问题的答案

\n\n
\n

什么时候我应该更喜欢顶级 const [...]?

\n
\n\n

总是。

\n\n

不过,这只是一个建议,最终取决于您想要如何组织代码并利用 IDE 中的代码完成功能。有时,为了自动完成,最好不要污染全局名称空间。由于这个问题已通过许多线程(例如此处此处)进行了广泛讨论,并且我想说这在很大程度上取决于一个人的偏好,因此我将其留在这里。

\n\n

不过,如果您想知道幕后发生了什么,从字节码的角度来看,两种方法之间存在细微差别。顶级或(伴随)对象常量最终都会成为某个类的静态成员,但对象方法另外创建一个静态INSTANCE字段来保存对象的引用。从记忆角度来看,这应该不会有太大区别,但意识到这一点是有好处的。

\n