2016-06-22 5 views
-6

さまざまな種類のクラスに対してすべての着信データベースクエリを処理する汎用データベース接続クラスを作成します。Javaジェネリックインターフェイスは、タイプTの代わりにオブジェクトを実装します

私は

public interface IDBConnection<T> { 

public void createOrUpdate(T t); 
public void delete(T t); 

public void initConnection(); 
public void closeConnection(); 
} 

汎用インタフェースを書いたとの実装は、createOrUpdate機能を持って言うことができますなぜ私は理解していないデータベース接続クラスに

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

} 
} 

それを実装しましたインターフェイスの定義のように "T t"ではなく "Object t"をパラメータとして使用しますか?

+1

'public class GenericDBCon implements IDBConnection'行にタイプ引数なしで' IDBConnection'を使用しています。 「生の型とは何ですか?なぜそれを使用しないのですか?」(http://stackoverflow.com/questions/2770321/what-is-a-raw-type-and-why-shouldnt-we-use-それ) – Jesper

答えて

1

なぜなら、いずれのクラスのヘッダーにもジェネリック宣言が含まれていないため、既定値はObjectです。

あなたは

public interface IDBConnection<T> 

へのIDbConnectionクラスのヘッダーを変更し、

public class GenericDBCon<T> implements IDBConnection<T> 

または

public class GenericDBCon implements IDBConnection<SomeClass> 

第二の代替にGenericDBConクラスのヘッダーのためにする必要がありますGenericDBConは、特定のクラスを(例えば、変数宣言:GenericDBCon<MyClass> dbCon = new GenericDBCon<MyClass>)によって提供されているものを取得するのではなく、一般的なものです。

0
public interface IDBConnection<T extends Model> { 

public void createOrUpdate(T t); 
public void delete(T t); 

public void initConnection(); 
public void closeConnection(); 
} 

//すべてのクラスでこのインターフェイスを拡張する必要があります。

+0

それはそれです - ありがとうございます:-) – 0apm

関連する問題