--------------------- scala> def typeOwnedElements[A](list:List[Any]):List[Any] = { | for(i <- list if i.isInstanceOf[A]) yield i | } <console>:5: warning: abstract type A in type is unchecked since it is eliminate d by erasure for(i <- list if i.isInstanceOf[A]) yield i ^ typeOwnedElements: [A](List[Any])List[Any] --------------------- というワーニングがでて、GenericTypeのAが無効化されてしまうっぽいです。だから こいつで実行すると、、、
----------------------
def typeOwnedElements(className:String, list:List[AnyRef]):List[AnyRef]={
for(i <- list if java.lang.Class.forName(className).isInstance(i)) yield i
}
----------------------
package scalasample
case class AA
case class BB extends AA
case class CC extends com.change_vision.jude.api.inf.model.IHyperlinkOwner {
def getHyperlinks = {
null
}
}
object StringSample {
def typeOwnedElements(className:String, list:List[AnyRef]):List[AnyRef]={
for(i <- list if java.lang.Class.forName(className).isInstance(i)) yield i
}
/**
* @param args the command line arguments
*/
def main(args: Array[String]):Unit = {
val list = List(AA(), BB(), AA(), AA())
println(typeOwnedElements("scalasample.AA", list))
println(typeOwnedElements("scalasample.BB", list))
val list2 = List(AA(), BB(), CC(), AA(), BB())
println(typeOwnedElements("com.change_vision.jude.api.inf.model.IHyperlinkOwner", list2))
// println(typeOwnedElements("xxx", list2)) class not found.