je suit la classe qui prend une interface et d'exécuter certaines fonctions:Spécifiez le type d'objet d'une liste de tableau retourné dynamiquement
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();
}
}
L'interface est implémentée par une classe abstraite:
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.");
}
}
}
La classe (ou l'interface) qui est passée à la classe gestionnaire étendent la classe abstraite ci-dessus:
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;
}
}
La question est de savoir s'il est possible de passer le type d'objet (MyObjectData
) de la méthode retournée de la méthode getDataList()
remplacée de la classe MSSQLTaskStatement
à la méthode de gestion de classe public List<?> getDataList() throws SQLException
?
Cordialement, Sandro
Quelles classes/interfaces de ceux-ci pouvez-vous changer? Tous? –
Oui. Peut-être que j'utilise un mauvais design mais en général ça marche bien jusqu'à présent. Je veux seulement me débarrasser de la distribution nécessaire lors de l'appel de la méthode getDataList() de la classe du gestionnaire. – sk2212