Ich möchte eine schnelle und dreckige Helferklasse schreiben, die meine Objekte schnell speichern kann. Deshalb benutze ich Ormlite.Inline-Klasse, die einen Typparameter erweitert
Ich möchte keine Anmerkungen zu meinen Klassen hinzufügen, daher versuche ich, einen Wrapper im laufenden Betrieb ohne irgendwelche Bytecode-Bibliotheken hinzuzufügen.
<T> void save(T o) {
@DatabaseTable
class wrap extends T {
@DatabaseField(generatedId = true)
public Long id;
}
try {
Dao<T, Long> d = (Dao<T, Long>) getClassDao(o.getClass());
TableUtils.createTableIfNotExists(connectionSource, o.getClass());
d.createOrUpdate(o);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
Das Problem ist class wrap extends T
- warum ist es nicht möglich T
zu verlängern?
kann ich T als nicht-final deklarieren? – wutzebaer
Es ist wahr, aber es geht nicht darum, endgültig zu sein. Es geht darum, * generisch * zu sein. 'T' könnte zur Laufzeit eine beliebige Klasse sein. Aber 'wrap' wird nur einmal kompiliert. Siehe Antwort von @Lii –