java generische Konstruktoren

Momentan habe ich folgende code ruft Daten aus der Datenbank und erstellen Sie dann eine User. Dieser code wird verwendet in vielen meiner classe zu erstellen, die andere Objekte wie News, Commentsetc...

Es nutzt apache commons dbutils.

final ResultSetHandler<User> handler = new ResultSetHandler<User>() {

            @Override
            public User handle(ResultSet rs) throws SQLException {

                User user = null;
                if (rs.next()) {
                    user = new User();
                    user.setId(rs.getInt("id"));
                    user.setUsername(rs.getString("username"));
                    user.setPassword(rs.getString("password"));
                }
                return user;
            }
        };

        final User user = run.query(
                "SELECT id, username, password FROM users WHERE username = ? AND active = 2 LIMIT 1;", handler,
                username);

Wäre es möglich, wickeln Sie die QueryRunner in einer generischen Klasse und überschreiben Sie die Methode " query (also die handler instantiieren der generischen T mit dem ResultSet. Ich würde sicherstellen, dass alle Tgeben würde ahve ein Konstruktor akzeptiert ein ResultSet.

Etwa so :

        public class QueryExecuter<T> extends QueryRunner {
    private ResultSetHandler<T> _handler;

    public QueryExecuter(){//The T type was for testing haha
        super();
        handler = new ResultSetHandler<T>() {

            @Override
            public T handle(ResultSet rs) throws SQLException {

                T object = null;
                if (rs.next()) {
                    object = new T(rs);
                }
                return object;
            }
        };
    }
}

Ich weiß nicht, ob Sie verstehen werden, aber ich hoffe doch, Fragen Sie mich, wenn Sie mehr details oder eine bessere Erklärung.

BEARBEITEN

Dachte ich, ich könnte mit einem AbstractClass statt des generischen Typs, die alle die verschiedenen Objekte erstreckt sich aber, wie es scheint, ich kann nicht schreiben, eine abstrakte Konstruktor. Werde ich haben, um eine statische Methode, die eine Instanz des Objekts wie:

public abstract class DatabaseEntity {
    public static abstract DatabaseEntity create(ResultSet rs);//even this doesn't work...
}
  • warum brauchen Sie, um pass T type im Konstruktor?
  • verwenden Sie reflektion, die Sie aufrufen können und die Klasse Konstruktor mit ResultSet
InformationsquelleAutor David | 2012-02-07
Schreibe einen Kommentar