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