繁体   English   中英

使用Java根据条件返回不同类型的对象

[英]Return different type of object based on condition using Java

我有三个查询

SELECT NAME FROM EMP WHERE EMPID=100; // THIS RETURNS A STRING

SELECT DEPTID FROM EMP WHERE EMPID=100; // THIS RETURNS AN INT

SELECT EMPID FROM DEPT WHERE DEPTID=101; // THIS RETURNS A LIST

现在,我正在尝试编写通用代码以返回对象,但是,我只能发送一种类型,即高级对象列表。 是否可以根据类型发送结果?

这是我的代码

public Object getObjectFromDB(final String query, final Map<Object, Object> inputMap, JdbcTemplate jdbcTemplate, final Object returnType) throws Exception {

    final List<Object> obj = new ArrayList<Object>();
    try {
        jdbcTemplate.query(new PreparedStatementCreator() {             
            @Override
            public PreparedStatement createPreparedStatement(Connection con) throws SQLException {
                return con.prepareStatement(query);
            }
        }, new PreparedStatementSetter() {
            @Override
            public void setValues(PreparedStatement ps) throws SQLException {

            }
        }, new ResultSetExtractor<Object>() {
            @Override
            public Object extractData(ResultSet rs) throws SQLException,DataAccessException {
                while(rs.next()) {
                    if(returnType instanceof Integer) {
                        obj.add(rs.getInt(1));   
                        break;                        
                    } else if(returnType instanceof String) {
                        obj.add(rs.getString(1));
                        break;
                    } else if(returnType instanceof List) {
                        obj.add(rs.getObject(1));
                    }

                }
                return obj;
            }
        });
    } catch (Exception e) {
        LOG.error(e);
    }
    return obj;
}   

即使我想触发第一个查询,它总是返回作为列表对象的obj。 任何想法,将不胜感激。

您是否尝试编写通用方法? 有关更多信息,请参见通用方法 如果您已经知道传递给方法的任何特定参数集所期望的返回类型,则可以轻松进行此操作。

这篇文章描述了如何编写具有通用返回类型的方法。

一种可能的功能原型可以是:

public static <T> List<T> getObjectFromDB(final String query, final Map<Object, Object> inputMap, JdbcTemplate jdbcTemplate, T returnType){
}

在此处声明时,它将始终返回List<Object>

final List<Object> obj = new ArrayList<Object>();

尝试检查obj的第一个元素(因为它是一个列表)及其类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM