Scala导入java包附加com

时间:2010-01-27 16:34:24

标签: java scala

我正在开发一个导入两个java库的Scala项目。通过糟糕的计划,两个java库具有相似的包名,一个在前面有com,一个没有。

问题是Scala首先在com中寻找包含com的包,并告诉我该包不存在。如果我使用包前面的com删除对库的所有引用,则编译工作。

显示一个有意义的例子:

在foo.jar,我们有一个包company.product.core

在bar.jar中我们有一个包com.company.product.other。

如果两个jar都在类路径上,则行:

import company.product.core.ClassName

失败并显示错误“value core不是com.companyname.product包的成员”如果我们删除bar.jar,编译工作正常。

Scala是否试图让我免于输入com。有没有办法告诉它只导入我告诉它的内容?

2 个答案:

答案 0 :(得分:11)

在import语句中使用_root_前缀。它使封装分辨率绝对。

import _root_.company.product.core.ClassName
import _root_.com.company.product.other.ClassName

引用你的评论:使用相对导入你可以做这样的事情。它基本上可以节省一些打字。

import _root_.company.product.core
import ClassAFromCore
import ClassBFromCore

答案 1 :(得分:4)

我猜你把那个导入行所在的地方属于以“com.”开头的包,如下所示:

package com.whatever
import company.product.core.ClassName

这意味着所有com.(包括com.company)都是范围的一部分,因此com.companycompany视为根,作为对象在层次结构范围内更接近那些更远的地方。

无论价值多少,Scala 2.8的规则都会略有不同。现在,如果我将我的包定义为:

package com.c.b.a

然后 a将在范围内。如果我希望得到以前的行为,我需要做:

package com
package c
package b
package a