Scala 如何进行嵌套导入

Scala 如何进行嵌套导入,scala,object,import,package,library-design,Scala,Object,Import,Package,Library Design,我正在尝试清理我的用户api,这样用户就可以整洁地从单个包对象导入,并获取其中的所有内容。我意识到我可以将我的包移动到最上面的包中,但我想知道是否有办法做到以下几点(我知道这可能不是最佳做法): 我有以下套餐: package org.Me.packages.packageA case class A() { // some implementation } package org.Me.packages.packageB case class B() { // some implemen

我正在尝试清理我的用户api,这样用户就可以整洁地从单个包对象导入,并获取其中的所有内容。我意识到我可以将我的包移动到最上面的包中,但我想知道是否有办法做到以下几点(我知道这可能不是最佳做法):

我有以下套餐:

package org.Me.packages.packageA

case class A() {
// some implementation
}

package org.Me.packages.packageB

case class B() {
// some implementation
}
现在,这需要导入以下格式:

import org.Me.packages.packageA.A
import org.Me.packages.packageB.B
我被要求做的是:

package org.Me.combinedPackages

package object Combined {
   import org.Me.packages.packageA.A
   import org.Me.packages.packageB.B 
}
因此,我的最终用户只需执行以下操作:

import org.Me.combinedPackages._

// access both a and b here
从我所读到的,我理解它意味着嵌套导入是不可能的


那么,我试图做的事情是不可能的吗?我意识到还有其他方法。

在Dotty中,您可以通过(双到
导入
):

但是,在Scala 2中,您必须:

  • 对要“传递”的每个类型使用类型别名,以使其可以从包中访问
  • 对于要通过包重定向的每个(伴随)对象,使用
    val

以防万一,我要提到的是,对于例如宏注释,这会中断,因为如果在宏注释类型中有这样的别名,编译器将不会识别出它应该使用原始类型的宏扩展来处理它。

这不是可传递的,只是通配符导入。没有这种可传递的导入。谢谢,我修复了标题
package org.Me.combinedPackages


export org.Me.packages.packageA.A
export org.Me.packages.packageB.B 
package my.package

// imported as my.package.exported._
package object exported {

  type NormalType = some.other.package.NormalType
  val NormalType: some.other.package.NormalType.type =
    some.other.package.NormalType
  
  type ParametricType[F[_], A] = some.other.package.ParametricType[F, A]
  val ParametricType: some.other.package.ParametricType.type =
    some.other.package.ParametricType

  // be careful to not import things that are automatically imported
  // e.g. implicits in companions, and avoid importing the same implicit
  // twice from two different packages
  implicit val redirectedImplicit: some.other.package.SomeImplicit =
    some.other.package.SomeImplicit
}