2012-06-06 2 views
2

У меня есть класс Java, который принимает параметр универсального типа и объект класса, связанный с этим типом:Может ли Scalas manifest.erasure правильно набираться?

public class Foo<T> { 
    public Foo(Class<? extends T> type) { 
    ... 
    } 
} 

Сначала я думал, что я мог сделать умную обертку для этого в Scala:

class Bar[T](implicit m: Manifest[T]) { 
    ... 
    new Foo[T](m.erasure) 
    ... 
} 

но это приводит к ошибке компилятора похож на это:

error: type mismatch; 
found : java.lang.Class[_$1(in value <local Bar>)] where type _$1(in value <local Bar>) 
required: java.lang.Class[_ <: T] 
class Bar[T](implicit m: Manifest[T]) { new Foo[T](m.erasure) } 

Я думаю, я понимаю, почему это происходит, но есть ли способ, которым я мог бы получить совместное rrect тип класса и сделать этот код компилируемым?

ответ

1

Как насчет m.erasure.asInstanceOf[Class[T]]?

Кстати, см this question для объяснения того, почему erasure возвращается Class[_] и не Class[T].

+0

Как всегда, ответ был слишком прост. Благодарю. – ripla

Смежные вопросы