当前位置: 首页 > 知识库问答 >
问题:

什么时候我应该更喜欢顶级常数和同伴对象常数?

容鸿畴
2023-03-14

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

const val URI = "sdfsdfsdf"

或者我应该使用:

companion object {
    const val URI = "sdfsdfsdf"
}

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

共有1个答案

王英奕
2023-03-14

据JetBrains报道:

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

基于此,你最初问题的答案

什么时候我更喜欢顶级常量[…]?

总是。

然而,这是一个建议,最终取决于您希望如何组织代码并利用集成开发环境中的代码完成功能。有时候,为了自动完成,最好不要污染您的全局命名空间。由于这个问题/问题已经通过许多线程(例如这里或这里)进行了广泛的讨论,我想说这在很大程度上取决于一个人的偏好,所以我就把它留在这里。

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

 类似资料:
  • 问题内容: 我正在实现一个API,有一个方法可以传递程序从中读取资源的路径列表 我正在使用varargs使调用方法尽可能方便用户,就像这样 这是varargs的适当用法吗?还是传递数组更好? 问题答案: 在您的情况下,varargs很好。您实际上并不需要对要导入的路径进行数组处理,因为除了将它们传递给您的方法外,您不需要执行任何其他操作。 varargs功能使您不必为了将一组值传递给一次性方法而显

  • 问题内容: 当喜欢过? 何时以及何时使用哪种数据结构: 您想要高效的读写 应该具有更少的内存占用 尽管存在类似的问题,但它并没有突出表明应该优先选择哪个事实? 问题答案: 蜘蛛侠鲍里斯(Boris the Spider)已经概述了和之间最明显的区别-前者始终是有界的,而后者可以是无界的。 因此,如果您需要无限制的阻塞队列,或者将其用作工具箱中的最佳选择。 但是,假设您需要一个有限的阻塞队列。最后,

  • 问题内容: 我的要求是仅显示跨数据库从数据库检索的一组值。我正在使用jQuery。 问题答案: 如果满足以下任一条件,则将XML优先于JSON: 您需要消息验证 您正在使用XSLT 您的消息中包含很多标记文字 您需要与不支持JSON的环境进行互操作 当所有这些都成立时,在XML上偏爱JSON: 不需要验证消息,或者验证消息的反序列化很简单 您不是要转换邮件,也不是转换邮件的反序列​​化很简单 您的

  • 问题内容: 什么时候应该创建一个检查异常,什么时候应该创建一个运行时异常? 例如,假设我创建了以下类: 我应该如何创建我的?它应该扩展还是?还是我应该只使用它? 问题答案: 在这个话题上有很多分歧。在我的上一份工作中,我们遇到了一些实际问题,运行时异常被遗忘了,直到它们出现在生产环境中(在ageswards.com上),因此我们决定只使用已检查的异常。 在我目前的工作中,我发现在很多情况下都有很多

  • 我们应该在什么时候选择抛出一个异常? 我们可以在try catch中捕获此异常。 在哪种情况下,我们选择使用投掷而不是立即接球?是否与设计模式相关?

  • 问题内容: 我一直在研究代码中Unicode’N’常量的使用,例如: 在阅读了什么时候使用它的内容之后,我仍然不清楚应该在什么情况下使用它,以及在什么情况下不应该使用它。 当数据类型或参数需要unicode数据类型时(如上述示例),它是否像使用它一样简单,还是比它更复杂? 以下Microsoft网站提供了解释,但对于使用http://msdn.microsoft.com/zh- cn/librar