Ok, ik snap iets niet en krijg het ook maar niet werkend. Ik heb de volgende code:
Clientcode:
Dit systeem is (zoals je al verwachtte) een manier om een resultset om te zetten in het echt object. Nu had ik bedacht dat aangezien Customer overerft van Account (en ook in dezelfde tabel staat) ik de AccountSqlMetaData ook kon overerven en dat, wanneer de convert(ResultSet rs, T t) methode wordt afgeroepen, deze van CustomerSqlMetaData zou zijn. Helaas wordt alleen de convert methode van AccountSqlMetaData afgeroepen
setBar() wordt dus nooit uitgevoerd.
Misschien dat ik iets vreselijks fout doe, maar zie het eventjes niet.
Update:
Ik zie inmiddels wel waar ik een redelijk grove denkfout maak. De convert method in CustomerSqlMetaData overwrite natuurlijk niet de convert method in AccountSqlMetaData
Java:
1
2
3
4
| public interface SqlMetaData<T> { void convert(ResultSet rs, T a) throws SQLException; } |
Java:
1
2
3
4
5
6
7
8
| public class AccountSqlMetaData implements SqlMetaData<Account> { public void convert(ResultSet rs, Account account) throws SQLException { account.setFoo(rs.getInt(getColumnName(FOO))); //...etc } } |
Java:
1
2
3
4
5
6
7
8
| public class CustomerSqlMetaData extends AccountSqlMetaData { public void convert(ResultSet rs, Customer customer) throws SQLException { super.convert(rs, customer); customer.setBar.getString(getColumnName(BAR))); //...etc } |
Clientcode:
Java:
1
2
3
| SqlMetaData smd = new CustomerSqlMetaData(); Customer c = new Customer(); smd.convert(rs, c); |
Dit systeem is (zoals je al verwachtte) een manier om een resultset om te zetten in het echt object. Nu had ik bedacht dat aangezien Customer overerft van Account (en ook in dezelfde tabel staat) ik de AccountSqlMetaData ook kon overerven en dat, wanneer de convert(ResultSet rs, T t) methode wordt afgeroepen, deze van CustomerSqlMetaData zou zijn. Helaas wordt alleen de convert methode van AccountSqlMetaData afgeroepen
Misschien dat ik iets vreselijks fout doe, maar zie het eventjes niet.
Update:
Ik zie inmiddels wel waar ik een redelijk grove denkfout maak. De convert method in CustomerSqlMetaData overwrite natuurlijk niet de convert method in AccountSqlMetaData

[ Voor 6% gewijzigd door Standeman op 07-01-2010 15:46 ]
The ships hung in the sky in much the same way that bricks don’t.