私はばかかもしれませんが、これを理解することができませんでした。DB を使用した単純な CRUD フレームワーク用にいくつかのクラスをセットアップしようとしています。
Entity
インターフェイスとUsers implements Entity
クラスから始めます。
次に、「dao」クラスとして、インターフェイスがあります
GenericTableModel<T extends Entity>
通常の関数、次に抽象クラス
AbstractTableModel<T extends Entity> implements GenericTableModel<T>
などの一般的な機能を実装し、List<T> listAll()
最後に
UsersTable extends AbstractTableModel<Users> implements GenericTableModel<Users>
これらはコンストラクタです
AbstractTableModel( Class<T> classType ){ this.type = classType; } and
UsersTable() { super( Users.class ); }
したがって、次のコードは期待どおりに機能します。listAll()
メソッドAsbtractTableModel
が呼び出され、魔法が起こり、Users
オブジェクトのリストが取得されます。
UsersTable ut = new UsersTable();
List<Users> usrLst = ut.listAll();
ただし、次のクラスを追加すると、状況が変わります。
public abstract class AbstractCrud<T extends GenericTableModel> {
private T table;
public AbstractCrud( T t ){ this.table = t }
public List<? extends Entity> getList(){
return this.table.listAll()
}
と
public class UserSimpleCrud extends AbstractCrud {
public UserSimpleCrud()
{
super( new UsersTable() );
}
super.getList()
のリストを返すのではなくUsers
、単にList
オブジェクトのリストを返します。のリストを取得するUsers
には、次のメソッドが必要ですUserSimpleCrud
@Override
public List<Users> getList(){
return super.getList();
}
オブジェクトのリストを のいずれかに自動的にキャストしますUsers
。
すっごく....ここで何が欠けていますか?いくつかの灰色の細胞を除いて、明らかに!;-)
メソッドがリストをキャストできるのに、listAll()
メソッドができないのはなぜですか?AsbtractTableModel
Users
getList()
AbstractCrud