2017-09-10 6 views
0

質問のヘッダがはっきりしないと思いますが、ここで説明しようとします。ランタイムジェネリックスケーラでクラスを渡す必要があります

私はクラス今私はそのオブジェクトをインスタンス化していますが、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 

しかし、上記のクラスはどのように使用できますか?

答えて

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 
} 
関連する問題