2011-07-05 72 views
6

我正在使用依賴於Scala 2.9的庫,但僅用於次要功能。我想提出與2.8兼容的版本,但我不想維護兩個代碼分支。由於我使用的是SBT,我想從中獲益交叉編譯功能。Scala中的條件編譯

但是我不知道是否有一種方法可以提供等價的條件編譯,只有在使用Scala 2.9時才包含一段代碼。反思可能是一種選擇(但是如何?)。

編輯:我在2.9中使用的功能是新的sys包對象。

回答

2

我反思了它。所以,如果我想要得到的sys.SystemProperties,我可以這樣做:

try { 
    val k = java.lang.Class.forName("scala.sys.package$") 
    val m = k.getMethod("props") 
    // etc. 
} catch { 
    case _ => throw new UnsupportedOperationException("Only available with Scala 2.9") 
} 

但它是如此的乏味和醜陋,我想我會丟棄這些功能...

+0

你不應該抓住像'NoSuchMethodException'這樣的東西嗎? –

+0

我抓住了一切,因爲所有的反思步驟都可能導致拋出異常。 – paradigmatic

+0

夠公平的。當做這種事情時,我通常會打開InvocationTargetException來使其更透明。 –