我有一个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
我有两个问题:
- 是我的Scala
class MyListener
定义正确,特别是Class[T]
,因为我从Java代码复制这个(见Android API的超链接)? - 我要做什么才能让
new MyListener
工作?
Scala总是使用方括号来表示类型参数,所以你要做的只是这样:
myObject.setMyListener(new MyListener[MySubClassOfMySuperClass]
(classOf[MySubClassOfMySuperClass], ...));
顺便说一下,这个令人困惑的诊断是因为产生java.lang.Class
实例的classOf
不是一个可以像函数或方法那样调用的值("不带参数")。请记住,Scala总是尝试推断泛型(如classOf
)的类型参数,奇怪的是,在不使用任何类型参数的情况下,它会成功地做到这一点。它推断类型Nothing
:
scala> classOf
res1: Class[Nothing] = null