[英]How to create an instance of an generic class in java?
我想知道是否可以創建一個構造函數:
public <C, T> C newInstance(Class<C> constructor_class,
Class<T> type,
Object...parameters){
// create a new Instance with the generic type and the paramters
//so basicly like this, but with generics and parameters
return constructor_class.newInstance();
}
你基本上不能。 你的例子壞了 - type
應該代表什么?
假設您想動態創建一個HashMap<String, Integer>
。 這將要求您傳入HashMap.class
、 String.class
和Integer.class
,但我們立即遇到了大量問題:
此外, Class
不能用於傳達泛型參數。 如果我想要一個HashMap<List<String>, Integer>
呢? List<String>
不作為類文字存在,因此這里不能使用java.lang.Class<T>
。 還有一些類對象(特別是int.class
)在泛型中是不合法的。 那么,我們有?
, ? super Foo
? super Foo
, A, B extends A, C extends A & Serializable
, List<String>
都作為可以進入<>
但不能是java.lang.Class
引用的東西的例子,以及合法的int.class
類 ref 但不能進入<>
。 你不能把方釘放在圓孔里。 更不用說即使可以,它實際上也絕對不會做任何事情的事實(請參閱第 3 點:這是無用的 - 大多數泛型,絕對是您在這里使用的泛型,會影響編譯並在之后不復存在)。
在這個領域有一些瘋狂的黑客(例如超級類型令牌),但是如果你不完全理解泛型在底層是如何工作的,那么你將能夠有用地使用這些黑客的機會為 0.00001% 或更少,所以不要'在那之前不要打擾。 提出這個問題,尤其是使用那個偽代碼,強烈表明你對它的了解還不夠。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.