如何将 Scala 中的包设为私有?

Posted

技术标签:

【中文标题】如何将 Scala 中的包设为私有?【英文标题】:How do I make a package in Scala private? 【发布时间】:2016-03-23 16:41:19 【问题描述】:

如果我在 Scala 中有这样的包层次结构:

package toplevel 
  package a 
    // some interesting stuff
  

  package b 
    // more interesting stuff
  

  package utility 
    // stuff that should not be accessible from the outside
    // and is not logically related to the project,
    // basically some helper objects
  

如何禁止toplevel包的用户查看或导入包utility

我尝试使用private[toplevel] package utility ...,但收到此错误:expected start of definition

我已经搜索过这个并且被误报所淹没:我得到的一切都是关于将事情包私有化,这不是我的问题。

【问题讨论】:

为什么需要那个实用程序包?私有对象不是更适合那里吗? 我需要这个包来放置一些元数据,以简化其他包的开发。这些东西可能应该在一个单独的库中,但我们不想要额外的依赖项。我希望它是一个包,因为它已经包含 6 个对象/类,可能还会有更多。将它们全部放在一个对象中意味着它们必须在同一个文件中,这会变得太混乱。 【参考方案1】:

你不能:包没有访问级别。

或者更确切地说,您可以使用OSGi 而不导出它们,但如果您出于其他原因也不需要它,这是一个非常重量级的解决方案。

【讨论】:

【参考方案2】:

要达到与 Java 中的私有包相同的目标,您可以使用增强的访问修饰符。在您的包实用程序中,您可以使用 private[utility] 限制访问。这样,包成员仅在包实用程序本身内部可用。

希望对您有所帮助。

【讨论】:

问题是如何使整个包私有,而不是如何使单个类包私有。【参考方案3】:
    You can only define the enclosing package, within which the code is defined

Answered 在这里。

【讨论】:

问题是如何使整个包私有,而不是如何使单个类包私有。

以上是关于如何将 Scala 中的包设为私有?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 UserControl 中的控件设为私有?

如何使用 setup.py 安装托管在私有 PyPI 中的包?

在 Java 类中定义 `package private` 访问修饰符

如何将私有存储库分支也设为私有?

如何将 scala 私有范围仅限于一个对象?

YOURLS 将“缩短”接口设为私有