2017-05-18 123 views
1

我基於命令行參數,這樣加載數據庫驅動程序:如何在實例化之前參數化泛型類?

Class driverClass = null; 
try { 
    driverClass = Class.forName(dbDriver); 
catch(ClassNotFoundException e) { 
    // Print error message here 
} 

後來我打電話driverClass.newInstance()

如何避免消息

類是原始類型。引用泛型類型Class<T>應該是參數

如果我嘗試Class<Driver>的部分的Class.forName抱怨類型不匹配:

類型不匹配:不能從Class<capture#1-of ?>轉換爲 Class<Driver>

這很奇怪,我如何正確地在第一行參數化類?

+0

的'class'不是由通用放慢參數的影響,所以你做調用'forName()'時不需要它。你調用'newInstance()'的時候嘗試過參數化嗎? – Turing85

+0

爲什麼你首先使用'forName'?這不是加載數據庫驅動程序的正確方法。 –

+0

@LewBloch好吧,我認爲這是正確的做法,我該如何做得更好? – Beginner

回答

1

如果我嘗試類的Class.forName部分抱怨類型錯配

那麼,如果你知道在編譯時的類名,爲什麼初始化使用forName類,只是這樣做:

Class<Driver> driverClass = Driver.class; 

如果你不知道在編譯時的類名,你可以簡單地把一個?作爲類型參數:

Class<?> driverClass = null; 
3

如果你現在知道確切的類名,您可以指定?作爲一種含義擴展Object任何類:

Class<?> driverClass = Class.forName(dbDriver); 
+0

由於您仍然實例化原始類型,因此這並不真正處理該問題。此外,不鼓勵使用純代碼的答案。請解釋你的解決方案。 – Turing85