我认为问题标题不明确,但我试着在这里解释一下。
假设我的课程 A 采用通用类型 T
class A[T] {
// Doing some thing with T
}
现在我正在实例化它的对象但是代替 T 我将在运行时传递一个类,如
Class.forName("com.somthing.SomeClass")
new A[com.somthing.SomeClass]() //but I don't have com.somthing.SomeClass at compile time
但我怎样才能使用上面的课程?
答案 0 :(得分:2)
你不能这样做,运行时没有T
。在擦除过程中键入参数“消失”,并替换为java.lang.Object
:
$ echo 'class A[T] { def f(t: T): T = t }' > test.scala
$ scalac test.scala
$ javap -c A.class
Compiled from "test.scala"
public class A<T> {
public T f(T);
Code:
0: aload_1
1: areturn
public A();
Code:
0: aload_0
1: invokespecial #19 // Method java/lang/Object."<init>":()V
4: return
}