[英]Dynamic return types through java generics
我需要從函數中獲取類似動態返回類型的信息。 此刻的代碼如下:
@Repository
public class SswltDataDAO {
private static final Logger logger = LoggerFactory.getLogger(SswltDataDAO.class);
private JdbcTemplate jdbcTemplate;
@Autowired
@Qualifier("dataSource_sswlt")
public void setDataSource(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
public List<Object> getSswltData(String tableName, String sql, Class className) {
List<Object> listOfOblects = null;
try{
listOfOblects = jdbcTemplate.query(sql, new BeanPropertyRowMapper(className));
}catch(Exception e){
logger.error("\n\nException while importing data from "+tableName+":\n", e);
listOfOblects = null;
e.printStackTrace();
}
return listOfOblects;
}
}
這是方法的用法:dataImportFromSswltToIwproImp()
Class MainService {
public boolean dataImportFromSswltToIwproImp() {
.......
List<Object> list = sswltDataDAO.getSswltData("tbl_sswltdata_addresses", "select * from tbl_sswltdata_addresses", SswltdataAddresses.class);
.........;
}
}
我想使用泛型來編寫方法getSswltData(),而不是返回List<Object>
而是應該動態返回List<class name>
即類類型對象的列表,而不是Object類對象的列表。 請注意,“類名”是在調用getSswltData()期間傳遞的類,這將是代碼的動態部分。
我很好奇,仍然有可能嗎? 我足夠靈活地更改代碼的任何部分,因此歡迎所有建議。
至於可能的簽名:
<T> List<T> getSswltData(String tableName, String sql, Class<T> className)
這樣,您可以將返回值定義為作為參數傳遞的類的實例的列表。
在內部,您可能必須進行一些強制轉換/轉換,因為我猜jdbcTemplate.query(sql, new BeanPropertyRowMapper(className));
只是返回一個List<Object>
。 如果您非常確定實際上得到了List<T>
,則可以嘗試轉換為原始類型List
然后再轉換為原始類型List<T>
但是您需要注意,如果返回的元素與傳遞的類不匹配。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.