我想创建一个通用数据库连接类,它处理不同类型类的所有传入数据库查询。
我写了一个通用界面
public interface IDBConnection<T> {
public void createOrUpdate(T t);
public void delete(T t);
public void initConnection();
public void closeConnection();
}
并将其实现到数据库连接类
中public class GenericDBCon implements IDBConnection {
private static JdbcConnectionSource con;
@Override
public void createOrUpdate(Object t) {
}
@Override
public void delete(Object t) {
}
@Override
public void initConnection() {
}
@Override
public void closeConnection() {
}
}
我不明白为什么执行,假设createOrUpdate-function有一个“Object t”作为参数而不是“T t”,就像在接口的定义中一样?
答案 0 :(得分:1)
原因是你没有在任何一个类中包含泛型声明。标题,因此默认为Object
。
您需要将IDBConnection类的标题更改为
public interface IDBConnection<T>
以及GenericDBCon
类的标题为
public class GenericDBCon<T> implements IDBConnection<T>
或
public class GenericDBCon implements IDBConnection<SomeClass>
GenericDBCon
的第二个选择提供了一个特定的类作为泛型,而不是由其他一些代码提供的一个(例如变量声明:GenericDBCon<MyClass> dbCon = new GenericDBCon<MyClass>
)。
答案 1 :(得分:0)
public interface IDBConnection<T extends Model> {
public void createOrUpdate(T t);
public void delete(T t);
public void initConnection();
public void closeConnection();
}
//所有类都应扩展此接口。
public interface Model {
//Define common table properties here which are used in create and delete
}
public class GenericDBCon<T extends Model> implements IDBConnection<T extends Model> {
private static JdbcConnectionSource con;
@Override
public void createOrUpdate(Model t) {
//Now it is ensured that the classes are of type model
}
@Override
public void delete(Model t) {
}
@Override
public void initConnection() {
}
@Override
public void closeConnection() {
}
}