我正在嘗試實(shí)現(xiàn)這個(gè)接受數(shù)據(jù)庫行和列名的方法,它返回該單元格中的值。用戶期望的類型由他們通過Class<T> type.// This return T, the value under the columnName in the row.public <T> T getColumnByName(Row row, String columnName, Class<T> type)而且我可以訪問這個(gè)名為的對象Row,它方便地為我提供了以下方法:row.getString(String columnName) // Gets String stored under columnrow.getLong(String columnName) // Gets the Long stored under columnetc...所以這是非常基本的,但我對泛型有點(diǎn)卡住了。我試圖以getColumnByName這種方式實(shí)現(xiàn):private <T> T getColumnByName(Row row, String name, Class<T> type) { if (type == Long.class) { return row.getLong(name); } else if (type == String.class) { return row.getString(name); } ... continued...}但是,我收到錯(cuò)誤“不兼容的類型,必需:T,找到:long”。我不確定如何處理將Row方法返回的具體類型轉(zhuǎn)換為編譯器將接受的泛型類型。關(guān)于如何做到這一點(diǎn)的任何想法?
1 回答

慕斯709654
TA貢獻(xiàn)1840條經(jīng)驗(yàn) 獲得超5個(gè)贊
您可以使用Class<T>傳入的用戶來說服編譯器您的代碼的正確性,盡管它確實(shí)增加了額外運(yùn)行時(shí)轉(zhuǎn)換的開銷:
private <T> T getColumnByName(Row row, String name, Class<T> type) {
if (type == Long.class) {
return type.cast(row.getLong(name));
} else if (type == String.class) {
return type.cast(row.getString(name));
} ... continued...
}
添加回答
舉報(bào)
0/150
提交
取消