簡體   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