2010-11-04 42 views
3

我想做的事的東西線(注意,我知道,這是不行的,但我的問題是,是否有可能使其工作):我可以使用結構打字來調用靜態Java方法嗎?

object O { 
    def main(args: Array[String]) { 
    val clazzname = classOf[System].getName 
    val c = Class.forName(clazzname).asInstanceOf[{def currentTimeMillis: Long}] 
    c.currentTimeMillis 
    } 
} 

這可能嗎? (不使用反射)

真正的用例是讀取序列化的protobuf消息。

+0

在scala用戶郵件列表上得到了答案:http://scala-programming-language.1934581.n4.nabble.com/Structural-types-and-static-java-methods-td3026795.html#a3026795 – 2010-11-04 13:05:42

回答

2

總之:沒有

我希望有一個更好的答案,但你可以從已經在郵件列表中看到,這不是(目前)成爲可能。希望Scala的本地反射支持成熟後,情況會有所改善。

0

這會爲你工作:

val c = new {      
    def cm = System.currentTimeMillis 
} 

但是請注意,結構類型使用反射內部。

+0

否,它wouldnt,我將該類的名稱作爲一個字符串,然後我需要調用類加載類使用Class.forName的currentTimeMillis方法(或在GPB示例parseFrom) – 2010-11-04 14:25:34

相關問題