Возвратите другой тип объекта, основанный на условии, используя Java - PullRequest
0 голосов
/ 26 декабря 2018

У меня есть три запроса, которые

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, который является объектом списка, даже если я хочу запустить первый запрос.Любые идеи будут оценены.

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

Он всегда будет возвращать List<Object>, поскольку вы объявляете его здесь

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

попытаться проверить первый элемент obj (как список) и его тип.

0 голосов
/ 26 декабря 2018

Вы пытались написать общий метод?См. Универсальные методы для получения дополнительной информации.Это может легко сработать, если вы уже знаете ожидаемый тип возвращаемого значения для любого конкретного набора параметров, передаваемых вашему методу.

В этом посте описывается, как написать метод с универсальным возвратом.type.

Один из возможных прототипов функций может быть:

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