[英]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.