2013-03-02 178 views
2

我有一個Java應用程序,我想轉移到Scala。所以我有這個內部類(原單,你可以在這裏找到:http://developer.android.com/reference/android/app/ActionBar.html#newTab()public static class TabListener ...使用Scala泛型:類[T]不參數

class MyListener[T <: MySuperClass] 
    (var myClass: Class[T], ...) 
    extends MyActionListener { ... } 

我的問題是,如何調用這個類。我嘗試這樣做:

myObject.setMyListener(
    new MyListener[MySubClassOfMySuperClass] 
    (classOf(MySubClassOfMySuperClass), ...)); 

但我得到的錯誤在我的IDE(classOf(MySubClassOfMySuperClass)):

Class[T] does not take parameters 

所以,我有兩個問題:

  • 是我斯卡拉class MyListener定義正確,特別是Class[T],因爲我從Java代碼複製了這個(請參閱Android API的超鏈接)?
  • 我需要做些什麼來獲得new MyListener的工作?

回答

7

斯卡拉總是使用方括號類型參數,所以你想做的事很簡單:

myObject.setMyListener(new MyListener[MySubClassOfMySuperClass] 
          (classOf[MySubClassOfMySuperClass], ...)); 

順便說一句,在混亂的診斷是因爲classOf,其產生的java.lang.Class一個實例,不是可以像函數或方法一樣調用的值(「不帶參數」)。請記住,Scala總是會試圖推斷類型參數爲泛型,如classOf,奇怪的是,它使用時沒有任何類型參數。它推斷類型Nothing

scala> classOf 
res1: Class[Nothing] = null 
+0

哦,謝謝,解決了!我的Java - > Scala轉換可以嗎? – Tim 2013-03-02 19:41:00

相關問題