我有一个 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 的超链接)? - 我需要做什么才能让
新的 MyListener
正常工作?
最佳答案
Scala 总是使用方括号作为类型参数,所以你要做的就是这样:
myObject.setMyListener(new MyListener[MySubClassOfMySuperClass]
(classOf[MySubClassOfMySuperClass], ...));
顺便说一句,令人困惑的诊断是因为生成 java.lang.Class
实例的 classOf
不是一个可以像函数一样调用的值或方法(“不带参数”)。请记住,Scala 始终会尝试将类型参数推断为泛型,例如 classOf
,奇怪的是,在没有任何类型参数的情况下使用时,它会成功地完成此操作。它推断类型 Nothing
:
scala> classOf
res1: Class[Nothing] = null
关于scala - 使用Scala泛型: Class[T] does not take parameters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15178499/