java - 需要在运行时传递类泛型scala

标签 java scala generics reflection

我认为问题标题不清楚,但我尝试在这里解释。

假设我有类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/

相关文章:

c# - 如何访问泛型类中泛型成员的属性

Java 继承 : Restrict List to Subclass Objects

java - 反序列化Java数据结构中的文本

java - 将Clojure的以vector为key的map转为java HashMap

java - Joda-Time 日期时间 欧洲/柏林夏令时

具有不同返回类型的 C# 通用接口(interface)

java - 将 ArrayList 条目设置为 ViewFlipper 子项

java - JFrame 不更新其内容

scala - 如何将分组的 Spark RDD 内容展平为单独的行然后保存到文件

scala - Spark : break partition iterator for better memory management?