Java通用接口实现Object而不是Type T.

时间:2016-06-22 09:36:21

标签: java generics inheritance interface

我想创建一个通用数据库连接类,它处理不同类型类的所有传入数据库查询。

我写了一个通用界面

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”,就像在接口的定义中一样?

2 个答案:

答案 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() {

}
}