2014-01-15 33 views
1

我發現一個構造是這樣的:如何使用getDeclaredConstructor如果我的構造函數接受基元類型?

type.getDeclaredConstructor(Integer.class); 

這工作時類型是

MyType { 
public MyType(Integer a); 
} 

然而,當類型爲

MyType { 
public MyType(int a); 
} 

這不工作,我不想用Integer代替int,因爲我被告知可能會產生不必要的開銷。

我該怎麼辦?

+0

關於被告知您可能發生不必要的開銷,這不是真的,這不會影響您的應用程序性能。你被告知的開銷是整數的裝箱/拆箱,甚至優化整數的-128,+127 –

+0

@Raffaele Rossi如果我有MyClass(整數i)並且不會進行裝箱/拆箱操作MyClass(2)? –

+0

如果您在MyClass(Integer i)上調用了新的MyClass(2),那麼裝箱將不會發生,因爲在您的JVM中應該存在與2相對應的緩存Integer對象(可能取決於JVM實現) –

回答

8

可以使用

type.getDeclaredConstructor(int.class); 

section 15.8.2 of the JLS

類文字是由類,接口,數組的名稱,或基本類型或僞類型的表達式無效,然後是'。'和令牌類。

+3

由於某些原因, Java的一個鮮爲人知的祕密之一。 – Ingo

相關問題