gpt4 book ai didi

java - 通过java泛型动态返回类型

转载 作者:行者123 更新时间:2023-12-02 03:04:14 25 4
gpt4 key购买 nike

我需要函数中的动态返回类型之类的东西。我此时的代码如下:

@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>但您需要注意,如果返回的元素与传递的类不匹配,您可能会引入难以发现的错误。

关于java - 通过java泛型动态返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41976810/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com