我认为问题标题不清楚,但我尝试在这里解释。
假设我有类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
但是我该如何使用上面的类呢?
最佳答案
你不能这样做,运行时没有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
}
关于java - 需要在运行时传递类泛型scala,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46144178/