【问题标题】:Java generic interface implements Object instead of Type TJava 泛型接口实现 Object 而不是 Type T
【发布时间】:2016-10-24 03:53:46
【问题描述】:

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

我写了一个通用接口

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 函数的实现有一个“Object t”作为参数,而不是接口定义中的“T t”?

【问题讨论】:

标签: java generics inheritance interface


【解决方案1】:

原因是你没有在任何一个类的标题中包含泛型声明,所以它默认为Object

您需要将 IDBConnection 类的标题更改为

public interface IDBConnection<T>

GenericDBCon类的标题

public class GenericDBCon<T> implements IDBConnection<T>

public class GenericDBCon implements IDBConnection<SomeClass>

GenericDBCon 的第二个替代方案提供了一个特定类作为泛型,而不是让某个其他代码段提供一个(例如,变量声明:GenericDBCon&lt;MyClass&gt; dbCon = new GenericDBCon&lt;MyClass&gt;)。

【讨论】:

    【解决方案2】:
    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() {
    
    }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-25
      • 1970-01-01
      相关资源
      最近更新 更多