[英]Using Scala generics: Class[T] does not take parameters
我有一个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
工作? Scala总是使用方括号作为类型参数,所以你想要做的只是这样:
myObject.setMyListener(new MyListener[MySubClassOfMySuperClass]
(classOf[MySubClassOfMySuperClass], ...));
顺便说一句,令人困惑的诊断是因为classOf
产生了一个java.lang.Class
实例,它不是一个可以像函数或方法一样调用的值(“不带参数”)。 请记住,Scala将始终尝试将类型参数推断为泛型,例如classOf
,奇怪的是,它在没有任何类型参数的情况下使用时成功。 它推断出Nothing
类型:
scala> classOf
res1: Class[Nothing] = null
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.