Generics und Interfaces

nieselfriem

Bekanntes Mitglied
Hallo!

ich bastel gerade an einer kleinen Datenbananwendung.
Dazu habe ich mir folgendes Interface erstellt:
Java:
package empathie.DAO;

public interface DAO<T> {
    public T retrieve(T id);
    public void add(T entry);
    public void update(T entry);

}
Nun möchte ich die Klasse implementieren
Java:
public class SQLHistorieDAO extends SQLConnect implements DAO<Historie> {

    public SQLHistorieDAO() {
        super();
    }

    public Historie retrieve(int id) throws SQLException {
        Historie his = new Historie();
        if (conn != null) {

            PreparedStatement stmt = conn.prepareStatement("SELECT HI-ID, AG-ID, Datum, AG-Historie FROM AG-Historie WHERE AG-ID = ?");
            stmt.setInt(1, id);
            ResultSet rs = stmt.executeQuery();

            while (rs.next()) {
                int hisId = rs.getInt(1);
                int pId = rs.getInt(2);
                String datum = rs.getString(3);
                String historie = rs.getString(4);

                his.setHisId(hisId);
                his.setDatum(datum);
                his.setPid(pId);
                his.setHistorie(historie);
            }//while
            conn.close();
        }//if
        return his;
    }//retrieve

    public Historie retrieve(String firma) throws SQLException {
        Historie his = new Historie();
        if (conn != null) {

            PreparedStatement stmt = conn.prepareStatement("SELECT HI-ID, AG-ID, Datum, AG-Historie FROM AG-Historie, Arbeitgeber WHERE AG-Historie.AG-ID = Arbeitgeber.AG-ID AND Firma like %?%");
            stmt.setString(1, firma);
            ResultSet rs = stmt.executeQuery();

            while (rs.next()) {
                int hisId = rs.getInt(1);
                int pId = rs.getInt(2);
                String datum = rs.getString(3);
                String historie = rs.getString(4);

                his.setHisId(hisId);
                his.setDatum(datum);
                his.setPid(pId);
                his.setHistorie(historie);
            }//while
            conn.close();
        }//if
        return his;
    }//retrieve

    public void update(int entry) throws SQLException {
    }

    public void update(String entry) throws SQLException {
    }

    public void add(int entry) throws SQLException {
    }
}
Nun bekomm ich leider die Meldung
Code:
 empathie.DAO.SQLHistorieDAO is not abstract and does not override abstract method update(empathie.PersonUndJob.Historie) in empathie.DAO.DAO
public class SQLHistorieDAO extends SQLConnect implements DAO<Historie> {
Also wenn ich das richtig verstanden habe, wird gesagt, dass ich doch gefälligst die update-Methode zu implementieren hätte. Das ist doch geschehen. Wieso will er die unbedingt weiterhin implementiert haben?

Gruß niesel
 
Demnach habe ich dass mit den generics offenbar nicht richtig gemacht. Wenn ich dass richtig verstanden habe, erwartet der Compiler nun eine Übergabe von einem Historienobjekt für die update Methode. Jedoch ist mein anliegen in dem Interface, dass ich dort Typ unabhängig die Methoden definiere und dann in der Klasse mit verschiedenen Datentypen mit ein und dem selben Methodennamen arbeiten kann

Gruß
 
Meiner Meinung nach ist [c]public T retrieve(T id);[/c] nicht besonders sinnvoll, zumal du es selbst nicht implementierst, sondern nur [c]public T retrieve(int id);[/c] und [c]public T retrieve(String id);[/c]
 

Zurück
Oben