def getParentOfType[T <: PsiElement](element: PsiElement, aClass: Class[T], strict: Boolean = false): Option[T] = {
System.out.println(aClass.isInstance(element), aClass, element.getClass)
...
getParentOfType(el, classOf[JSClassImpl])
打印如下:斯卡拉類型比較不工作
(false,class com.intellij.lang.javascript.psi.ecmal4.impl.JSClassImpl,class com.intellij.lang.javascript.psi.ecmal4.impl.JSClassImpl)
不宜這些評估爲真?
目前的解決辦法是:
System.out.println(aClass.toString == element.getClass.toString)
這似乎是荒謬的。我已經嘗試了一切!
,然後當我從方法返回一個Option(el.asInstanceOf[T])
,我得到以下錯誤,每當我嘗試使用它:
java.lang.ClassCastException: com.intellij.lang.javascript.psi.ecmal4.impl.JSClassImpl cannot be cast to com.intellij.lang.javascript.psi.ecmal4.impl.JSClassImpl
我有一種感覺它是與類加載器。
ClassCastException when casting to the same class
從的IntelliJ支持論壇:
你要注意,插件有自己的ClassLoader。
http://devnet.jetbrains.com/message/5259550;jsessionid=13C3F98277311F5EFFFAFD3135B42CEA
的可能的複製http://stackoverflow.com/questions/9642859/scala -generic-abstract-type-ignored-for-isinstanceof –
從沒有工作的問題嘗試了'System.out.println(manifest.erasure.isInstance(element))'。 – vaughan