Base
の型パラメータの制約を満足しないという問題があります。問題はRecursive<?>
がBase
の型パラメータの制約を満たさないことです。
Base<R>
を延長する場合は、R
に何かを指定する必要があります。Recursive<R>
です。コンパイラがRecursive<?> extends Recursive< Recursive<?> >
を見つけられないので、Recursive<?>
は十分ではありません。
それは本当に未知のタイプのBase
を延長しても意味がありませんが、あなたはそれらの異種コレクションを宣言することができます:私たちはBase
が
public abstract class Base< R extends Recursive<R> > {
public abstract R[] foo();
}
ようになります知っているあなたのコメントから
Collection< Base<?> > cb; // ok for some reason
Collection< Base< Recursive<?> > > cbr; // not ok!
を
各資格についてR
を行うことができます。
public class Derived< R extends Recursive<R> > extends Base<R> {
@Override public R[] foo() {
return (R[])new Object[] { r1, r2 };
}
}
あなたのコメントから、これがあなたの望むものであることは明らかではありません。特定のR
がDerived
にはどのようなものを使用したいのですか?
編集以下のコンパイル。これで十分だろうか?最初の投稿に変更するために調整
interface Recursive< R extends Recursive<R> > {}
abstract class Base< R extends Recursive< ? extends R > > {
abstract public R[] foo();
}
class Derived extends Base< Recursive<?> > {
public Recursive<?>[] foo() { return null; }
}
EDIT 2:
あなたのサブクラス(バインド右に)入力する必要があり
interface Recursive< R extends Recursive<R> > {}
interface Use< R extends Recursive< ? extends R > > {}
abstract class Base< R extends Recursive< ? extends R > > {
abstract public Use<R>[] foo();
}
class Derived extends Base< Recursive<?> > {
@Override public Use< Recursive<?> >[] foo() { return null; }
}
あなたはあなたの派生クラスでやりたいのですか?あなたのコードはコンパイルされますか? –
'Derived extends Base'で十分です。 –
しかし、私は生のタイプを使用しているので警告が表示されますが、この警告が表示されない場合は方法がありますか? – MZuenni