我在自己的包中有一些Scala类和对象。每个包都有一个包对象来定义一些含义,例如import com.foo.bar._
从bar
包中导入所有含义和类
我想知道的是,有没有办法定义“伞”导入,比如说com.foo.all
,
import com.foo.all._
相当于
import com.foo.bar._
import com.foo.baz._
import com.foo.qux._
...
我可以理解这可能有点不清楚,但如果我认为我拥有大量自己的软件包,这显然会更简洁。
答案 0 :(得分:11)
我能提出的最短形式是:
import com.foo._, bar._, baz._, qux._
例如:
import scala.collection.mutable._, PriorityQueue._, ArrayBuffer._
修改强>
也许,你只想使用一些特定的东西,as @alex23 pointed out,所以你可以写:
import com.foo.{foo, bar, baz}, bar._, baz._, qux._
答案 1 :(得分:7)
从同一个包导入多个类/对象的Scala方法是:
import scala.collection.immutable.{Map, HashMap, etc}
酷Scala唯一技巧:别名/重命名
import java.util.{Collection => JavaCollection}
答案 2 :(得分:1)
目前你不能轻易做到这一点,但你可以通过一些努力来接近。
如果您为其他包中的每个类创建package object all
并设置类型别名,并为每个方法创建转发方法(如果其他方法是包对象),则导入将执行您想要的操作。< / p>
有一些关于export feature的讨论会使这更容易,但它甚至不是一个具体的提案,更不用说实施了。
在任何情况下,您都不需要反复重复import
:
import com.foo.bar._, com.foo.baz._, ...
但是所有缩短列表的方法都没有完全相同的事情(例如,将导入名称bar
本身,而不仅仅是其内容 - 这对您来说可能不是问题,但它是某种东西要注意)。
也就是说,在导出机制出现之前,如果您在自己的行中键入所有内容,您的代码将具有最大的可读性和可维护性。当一切都被卡在一条线上时,更难注意到缺失的东西或额外的东西。
答案 3 :(得分:0)
如果bar._, baz._, qux._
构成com.foo
中的所有内容,那么您可以com.foo._