3

我有一个 Java 应用程序,我想迁移到 Scala。所以我有这个内部类(原来的,你可以在这里找到:http: //developer.android.com/reference/android/app/ActionBar.html#newTab(public static class TabListener ... ) :)

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

所以,我有两个问题:

  • 我的 Scalaclass MyListener定义是否正确,尤其是Class[T]因为我从 Java 代码中复制了它(请参阅 Android API 的超链接)?
  • 我必须做什么才能new MyListener工作?
4

1 回答 1

9

Scala 总是使用方括号作为类型参数,所以你想要做的就是这样:

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

顺便说一句,令人困惑的诊断是因为classOf产生 的实例的java.lang.Class,不是可以像函数或方法那样调用的值(“不接受参数”)。请记住,Scala 总是会尝试将类型参数推断为泛型classOf,奇怪的是,它在没有任何类型参数的情况下使用时会成功。它推断类型Nothing

scala> classOf
res1: Class[Nothing] = null
于 2013-03-02T19:38:58.547 回答