Java 抽象方法上的不同列表返回类型
我试图用抽象输出类的子类将返回类型与数据库函数调用分开。我遇到了这样一个问题:我的抽象方法(getResults)返回类型需要与日期、字符或字符串的ResultSet不同,但它们都应该属于输出类或接口。返回结果集的子类需要返回一个Java 抽象方法上的不同列表返回类型,java,generics,inheritance,Java,Generics,Inheritance,我试图用抽象输出类的子类将返回类型与数据库函数调用分开。我遇到了这样一个问题:我的抽象方法(getResults)返回类型需要与日期、字符或字符串的ResultSet不同,但它们都应该属于输出类或接口。返回结果集的子类需要返回一个列表,日期应该返回列表,字符串列表,等等 客户端代码: LoadableStatement loadedStatementObject= new LoadableStatement.Builder() .addParam(new In(2, 11
列表
,日期应该返回列表
,字符串列表
,等等
客户端代码:
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>
}
}
公共类输出{
//构造函数、字段等。。。
公共摘要集合getResults();
}
公共类游标扩展输出{
私人名单结果;
公共游标(LoadableStatement语句){
超级(声明);
}
@凌驾
公共集合getResults(){
//将某种类型的列表从DB转换为
//名单
返回新的ArrayList();
}
}
公共类StringResult扩展了输出{
公共StringResult(LoadableStatement语句){
超级(声明);
}
@凌驾
公共集合getResults(){
//将列表从DB转换为列表的逻辑
}
}
我怎样才能做到这一点 试试这样的方法:
public class LoadableStatement {}
public abstract class Output<E> {
//Constructor, fields etc...
public abstract Collection<E> getResults();
public Output(LoadableStatement statement) {
/* Some implementation ... */
}
}
public class Cursor extends Output<Map<String, Object>> {
private List<Map<String, Object>> results;
public Cursor(LoadableStatement statement) {
super(statement);
}
@Override
public Collection<Map<String, Object>> getResults() {
//Logic to convert some type of list from DB into a
//List<Map<String,Object>>
return new ArrayList<>();
}
}
public class StringResult extends Output<String> {
public StringResult(LoadableStatement statement) {
super(statement);
}
@Override
public Collection<String> getResults() {
//Logic that converts a list from DB into a List<String>
return new ArrayList<>();
}
}
公共类LoadableStatement{}
公共抽象类输出{
//构造函数、字段等。。。
公共摘要集合getResults();
公共输出(LoadableStatement语句){
/*一些实现*/
}
}
公共类游标扩展输出{
私人名单结果;
公共游标(LoadableStatement语句){
超级(声明);
}
@凌驾
公共集合getResults(){
//将某种类型的列表从DB转换为
//名单
返回新的ArrayList();
}
}
公共类StringResult扩展了输出{
公共StringResult(LoadableStatement语句){
超级(声明);
}
@凌驾
公共集合getResults(){
//将列表从DB转换为列表的逻辑
返回新的ArrayList();
}
}
您应该定义输出类的通用版本。具有泛型返回类型的泛型函数。以下是一些示例代码:
public class Output<T>{
//fields and constructor
public T getResults();
}
公共类输出{
//字段和构造函数
公共T getResults();
}
这里的T表示您可以使用任何标识符的类型
注意:在使用集合时,请记住集合中不允许使用原语。到目前为止,您尝试了什么?我尝试过使用泛型,但我确信是错误的。我已经尝试了列表,收集,然后分享你所做的。拉文德拉,我添加了代码。