我有一个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
所以,我有两个问题:
class MyListener
是否已正确定义,尤其是Class[T]
,因为我从Java代码中复制了此内容(请参阅Android API的超链接)?new MyListener
正常工作?答案 0 :(得分:7)
Scala总是使用方括号作为类型参数,所以你想做的只是:
myObject.setMyListener(new MyListener[MySubClassOfMySuperClass]
(classOf[MySubClassOfMySuperClass], ...));
顺便说一句,令人困惑的诊断是因为产生classOf
实例的java.lang.Class
不是可以像函数或方法一样调用的值(“不带参数”) 。请记住,Scala将始终尝试将类型参数推断为泛型,例如classOf
,奇怪的是,它在没有任何类型参数的情况下成功使用。它推断出类型Nothing
:
scala> classOf
res1: Class[Nothing] = null