繁体   English   中英

使用Scala泛型:Class [T]不接受参数

[英]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

因此,我有两个问题:

  • 我的Scala 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM