ジェネリックスを使用して、インターフェイスを希望どおりに機能させるのに問題があります。
さまざまなオブジェクトのデータアクセスを処理するためのCRUDスタイルのインターフェイスがあります。Comparable<?>
オブジェクトにはさまざまなタイプの識別子がある可能性があるため、識別子でオブジェクトを取得するために使用されます。
public interface DataProvider<T> {
T create(T object);
T get(Comparable<?> id);
void update(T object);
void delete(T object);
}
ここで、アクセスする必要のあるそのような(考案された)オブジェクトの1つを想像してみてくださいBook
。
public class Book implements Comparable<Book> {
private ISBN isbn;
public int compareTo(Book other) {
return getIsbn().compareTo(other.getIsbn());
}
// ...
}
私がしたいのはこれです:
public class BookDataProvider implements DataProvider<Book> {
public Book create(Book book) { ... }
public Book get(ISBN isbn) { ... }
public void update(Book book) { ... }
public void delete(Book book) { ... }
}
変更DataProvider
および/またはコンパイルBook
を許可する最も簡単な方法は何ですか?get(ISBN)
私はいくつかの部分的な解決策を考え出しましたが、どちらが最適かはわかりません:
DataProvider
として入力しDataProvider<T, I extends Comparable<I>>
ますが、これにより追加の型パラメーターが追加されます。- この関連する投稿
Identifiable
ごとにインターフェイスを導入し、実装して、と入力しますが、の署名を取得できません。Book
DataProvider
DataProvider<T extends Identifiable<?>>
get(ISBN)
DataProvider
理想的には、タイプパラメータを1つだけに制限したいと思います。私は他のアプローチにもオープンです。ありがとう。