Я пытаюсь отделить типы возвращаемых данных от вызовов функций базы данных с помощью подклассов абстрактного класса Output. Я столкнулся с проблемой, когда мой тип возвращаемого значения абстрактного метода (getResults) должен отличаться для ResultSet от Date, char или string, но все они должны попадать в класс Output или интерфейс. Подкласс, который возвращает ResultSet, должен возвращать List<Map<String,Object>>
, Date должен возвращать List<Date>
, String List<String>
и т. Д. *
Код клиента:
LoadableStatement loadedStatementObject= new LoadableStatement.Builder()
.addParam(new In(2, 111111))
.addParam(new Out(1, OracleTypes.CURSOR))
.addStatement(DBPackage.LOOKUP_RECORD.getStatement())
.load();
Output cursor = new Cursor(loadedStatementObject);
абстрактный методв Output.java и подклассах.
public class Output{
//Constructor, fields etc...
public abstract Collection getResults();
}
public class Cursor extends Output {
private List<Map<String, Object>> results;
public Cursor(LoadableStatement statement) {
super(statement);
}
@Override
public Collection getResults() {
//Logic to convert some type of list from DB into a
//List<Map<String,Object>>
return new ArrayList<Map<String, Object>>();
}
}
public class StringResult extends Output {
public StringResult(LoadableStatement statement) {
super(statement);
}
@Override
public Collection getResults() {
//Logic that converts a list from DB into a List<String>
}
}
Как я могу это сделать?