请考虑以下代码:
public Record getRecordByPk(String pkValue) {
Record record = null;
Result result = database.query(tableName, recordPkColumn, pkey);
类Record
是一个抽象类,其方法为getTableName
和getPkColumnName
。还有其他类扩展Record
,这些其他类是真正返回的。
如果不允许初始化抽象类,我如何引用这些方法并使用它们而不是tableName
和recordPkColumn
?
我应该使用泛型吗?如果是这样,那么我会这样做:
public G getRecordByPk(String pkValue, G recordInstance) {
但我不喜欢像recordInstance
这样的东西,所以我可以参考这些方法。所以我该怎么做?或者我在做什么本来就是错的?
背景
我在android中编写一个简单的数据库应用程序。但我认为这个问题在java中是通用的,所以我之前没有添加它。
我在创建DatabaseManager时遵循了this教程,但我的应用程序有更多的表,所以我挑战自己编写一个可以处理所有表的通用DatabaseManager。我使所有这些表继承自Record
抽象类,因此我可以使我的DatabaseManager通用。然后我使用DatabaseManager中的Record
进行查询。
答案 0 :(得分:0)
恕我直言,Record
类将表名和列名作为公共方法返回有点奇怪。我要么使用对象工厂以防需要灵活性,要么使用简单的硬编码load()方法,以防表名称可以硬编码。
答案 1 :(得分:0)
所以问题是:
如果不允许初始化抽象类,我如何引用这些方法并使用它们而不是tableName
和recordPkColumn
?
答案是:
你不能在没有物体实例的情况下调用物体的方法,就像在现实生活中一样,如果你没有车,就不能驾驶汽车。 - JB Nizet