2013-03-02 147 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

相关问题