簡體   English   中英

通過Java泛型的動態返回類型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM