2012-12-11 32 views
6

假設我有一個包含com.example.a.b.c包的大量案例類的Scala項目。我想將所有這些類導入包com.example.c(其中包含幾個非衝突的個案類),以便在我的項目的其他任何地方,我只需要import com.example.c._即可使用com.example.ccom.example.a.b.c中的每個案例類。導入包作爲另一個

我該怎麼做?

+0

你只是試圖以合理的方式組織你的代碼,並且你有組織的控制權嗎?如果是這樣,你可以在trait(或traits)中定義你的'com.example.a.b.c'個案類,然後寫'package object c extends ThatTrait'。例如斯卡拉斯廣泛使用這種方法。 –

+0

這是一個有趣的方法!我不得不與團隊討論它,因爲我實際上不能控制'com.example.a.b.c'。 – user510159

回答

8

有討論增加一個出口機制,它會做你想做的,但不清楚是否會發生。

在任何情況下,對於現在的唯一方法是

  • 定義每類
  • 設置等於每一個val的對象的類型

因此,例如,

package bar 
case class Foo(i: Int) {} 

需要在另一個包中模仿

package object baz { 
    type Foo = bar.Foo 
    val Foo = bar.Foo 
} 

當面對這種情況時,人們通常只是爲了額外的進口而定居。

+0

謝謝雷克斯!公認!我同意額外的進口是簡單的解決方案,但是當你需要這些額外的進口報表時,這是一個真正的痛苦。而爲了維護的目的,我寧願在一個地方做出突破性的改變。 – user510159

1

scala中的import語句只是告訴編譯器在java中找到其他類的位置,而不像C/C++中的編譯器在物理上覆制整個頭文件的#include指令。如果你想使用com.example.a.b.c的案例類,你應該從他們自己的包中導入它們,因爲這是傳統的方式。

相關問題