Variabler Rückgabetyp und Klasse an Methode übergeben?

Status
Nicht offen für weitere Antworten.

UnkiDunki

Bekanntes Mitglied
Hi,

ich habe eine Methode, die mir ein TableModel zurückgibt (zum Füllen einer JTable aus Datenbank).


Code:
...
DefaultTableModel aModel = newModel(query, columnNames);
...
}

public static TableModel_JAVAFORUM newModel(String query,
			String[] columnNames) {
		TableModel_JAVAFORUM aModel = new TableModel_JAVAFORUM();

		Connection con;
		try {
			con = Methods.getConnection();

			Statement stmt = con.createStatement();
			ResultSet rs = stmt.executeQuery(query);

			// TableModel definition
			aModel.setColumnIdentifiers(columnNames);

			// Loop through the ResultSet and transfer in the Model
			final java.sql.ResultSetMetaData rsmd = rs.getMetaData();
			int colNo = rsmd.getColumnCount();
			while (rs.next()) {
				Object[] objects = new Object[colNo];

				for (int i = 0; i < colNo; i++) {
					objects[i] = rs.getObject(i + 1);
				}
				aModel.addRow(objects);
			}

		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return aModel;
	}

Ich arbeite mit unterschiedlichen TableModels und muss so, wie ich es jetzt gestaltet habe, in jeder Klasse (mit eigenem TableModel) explizit diese Methode hinzufügen.
Wie schaffe ich es, dass ich diese Methode "auslagern" kann und das TableModel irgendwie aus den jeweiligen Klassen übergeben kann und so nur EINE Methode habe, die aber halt in der Hinsicht flexibel ist.
Geht das?

Also in der einen Klasse die Funktion Auslagerung.newModel(..., TableModel_JAVAFORUM) und in der anderen z.B.
Auslagerung.newModel(..., TableModel_anderesJAVAFORUM) aufrufen kann.

Ziel ist es, dass ich den Code ein wenig kompakter schreibe und Funktionen, die sich nur in solchen "Kleinigkeiten" unterscheiden nur 1mal schreiben brauche.

Ich hoffe, dass ich mich verständlich ausgedrückt habe...
 
Das Auslagern ist nicht das Problem. Klar ist das dann ne statische, aber wie manage ich das mit den unterschiedlichen TableModels? Wie gesagt: Diese Methode soll sich ja variable immer dort unterscheiden.
So wie oben muss ich ja sonst für jede TableModel-Klasse eine eigene Methode haben.

UPDATE: So möchte ich es nicht haben:

Code:
...
public static TableModel_JAVAFORUM2 newModel(String query,
         String[] columnNames) {
      TableModel_JAVAFORUM2 aModel = new TableModel_JAVAFORUM2();

      Connection con; 
...}

public static TableModel_JAVAFORUM newModel(String query,
         String[] columnNames) {
      TableModel_JAVAFORUM aModel = new TableModel_JAVAFORUM();

      Connection con; 
...
}
...
 
wie wärs hiermit?
Code:
...
TableModel_JAVAFORUM aModel = (TableModel_JAVAFORUM) newModel(query, columnNames, new TableModel_JAVAFORUM());
...
}

public static TableModel newModel(String query,
         String[] columnNames, TableModel aModel) {

      Connection con;
      try {
         ...
      return aModel;
   }
 
Perfekt... Funktioniert einwandfrei!

Frag mich wieso meine Versuche gescheitert sind. Kann mich nicht erinnern, weil das schon ein älteres Problem von mir war, dass ich heute neu aufgerollt habe.
Ich glaube, ich bin nicht auf die Idee gekommen, aModel direkt als Parameter zu übergeben, sondern das erst in der Methode zu instanziieren... und da gab es irgendwelche Probleme... mhmm

Jedenfalls super! Vielen Dank 🙂
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben