gpt4 book ai didi

java - 动态指定返回数组列表的对象类型

转载 作者:行者123 更新时间:2023-12-01 14:47:31 25 4
gpt4 key购买 nike

我有以下类,它采用接口(interface)并执行一些函数:

public class MSSQLHandler {

IMSSQLStatement statement;

public MSSQLHandler(IMSSQLStatement statement) {
this.statement = statement;
}

public void invoke() throws SQLException {
statement.executeStatement();
}

public List<?> getDataList() throws SQLException {
return statement.getDataList();
}
}

接口(interface)由抽象类实现:

public abstract class MSSQLStatement implements IMSSQLStatement {

protected Connection conn = null;
protected ResultSet rs = null;

protected abstract String createStatement() throws SQLSyntaxErrorException;

public MSSQLStatement(Connection conn) {
this.conn = conn;
}

public void executeStatement() throws SQLException {
Statement st = conn.createStatement();
String sql = createStatement();
if(sql != null) {
rs = st.executeQuery(createStatement());
} else {
throw new SQLException("Method 'createStatement()' has to be implemented.");
}
}
}

传递给处理程序类的类(或接口(interface))从上面扩展抽象类:

public class MSSQLTaskStatement extends MSSQLStatement {

public MSSQLTaskStatement(Connection conn) {
super(conn);
}

private String projectName = null;

public void setProjectName(String projectName) {
this.projectName = projectName;
}

protected String createStatement() throws SQLSyntaxErrorException {
// Create SQL query
}

@Override
public List<MyObjectData> getDataList() throws SQLException {
// Wrap results into a data object and save it to an array list
List<MyObjectData> l = new ArrayList<MyObjectData>()
while(rs.next()) {
MyObjectData o = new MyObjectData();
o.setColumn1(rs.getString(1))
l.add(o);
}
return l;
}
}

问题是是否可以传递覆盖 MyObjectData 的返回列表的对象类型( getDataList() )类 MSSQLTaskStatement 中的方法到处理程序类public List<?> getDataList() throws SQLException方法?

最诚挚的问候,桑德罗

最佳答案

<T><T extends ObjectDataBaseClass> 添加类型参数 IMSSQLStatementMSSQLStatement ,将 IMSSQLStatement 中的方法 getDataList 更改为 List<T> getDataList() 并使用 public class MSSQLTaskStatement extends MSSQLStatement<MyObjectData>

然后,如果您的 MSSQLHandler 有一个字段 IMSSQLStatement<MyObjectData> statement ,它自己的 getDataList() 可以类型安全地返回 List<MyObjectData> (或者,如果您想将它与不构建于 MSSQLHandler 的语句一起使用,您也可以将 MyObjectData 设为通用)。

关于java - 动态指定返回数组列表的对象类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15270133/

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