使用Scala泛型:类[T]不参数
问题描述:
我有一个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
的工作?
答
斯卡拉总是使用方括号类型参数,所以你想做的事很简单:
myObject.setMyListener(new MyListener[MySubClassOfMySuperClass]
(classOf[MySubClassOfMySuperClass], ...));
顺便说一句,在混乱的诊断是因为classOf
,其产生的java.lang.Class
一个实例,不是可以像函数或方法一样调用的值(“不带参数”)。请记住,Scala总是会试图推断类型参数为泛型,如classOf
,奇怪的是,它使用时没有任何类型参数。它推断类型Nothing
:
scala> classOf
res1: Class[Nothing] = null
哦,谢谢,解决了!我的Java - > Scala转换可以吗? – Tim 2013-03-02 19:41:00