私はこのインターフェースを持っています:
public interface IDeck<T extends IDeck<T,S>,S extends ICard<S>> extends Comparable<T>, Collection<S>{
public Set<S> getDeck();
public void setDeck(Set<S> newDeck);
}
次に、クラスにそれを実装させます。ヘッダーと最初のいくつかのメソッドは次のとおりです。
public class PlayingCardDeck implements IDeck<PlayingCardDeck,PlayingCard> {
@Override
public int compareTo(PlayingCardDeck o) {
// TODO Auto-generated method stub
return 0;
}
ここまでは良いので、比較してみたいと思います。
@Override
public boolean add(PlayingCard e) {
// TODO Auto-generated method stub
return false;
}
はい、PlayingCards を含めることができます
@Override
public boolean addAll(Collection<? extends PlayingCard> c) {
// TODO Auto-generated method stub
return false;
}
コレクション要素が PlayingCard を拡張する限り、これは問題ないと思いますが、これはadd(PlayingCard e)
メソッドと一致しません。
@Override
public boolean contains(Object o) {
// TODO Auto-generated method stub
return false;
}
ちょっとまって?型がここObject
にあるのに ではないのはなぜPlayingCard
ですか?
public Object[] toArray() {
// TODO Auto-generated method stub
return null;
}
では、配列は PlayingCards ではなく Objects でなければならないのでしょうか?
提供したジェネリックではなく、インターフェイスから実装された「奇妙な」関数を取得するのはなぜですか? 私は何を逃したのですか?