簡體   English   中英

Scala導入java包附加com

[英]Scala import java package appending com

我正在開發一個導入兩個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

失敗的錯誤“值core不是包com.companyname.product的成員”如果我們刪除bar.jar,編譯工作正常。

Scala是否試圖讓我免於輸入com。 有沒有辦法告訴它只導入我告訴它的內容?

在import語句中使用_root_前綴。 它使封裝分辨率絕對。

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

引用你評論:使用相對導入你可以做這樣的事情。 它基本上可以節省一些打字。

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

我猜你把那個導入行所在的地方屬於一個以“ com. ”開頭的包,就像這樣:

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

這意味着所有的com. ,包括com.company ,是范圍的一部分,因此, com.company會影響作為root的company ,因為層次結構范圍內的對象會影響更遠的范圍。

無論價值多少,Scala 2.8都會有不同的規則。 現在,如果我將我的包定義為:

package com.c.b.a

然后只有 a將在范圍內。 如果我希望得到以前的行為,我需要這樣做:

package com
package c
package b
package a

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM