クライアントコードでジェネリッククラスとその型引数を操作する必要があります。
public class Usable {
...
}
public interface User<T extends Usable> {
public void use(T usable);
}
//client
public class UserDemo {
public void demo() {
Usable usable = getUsable(); //returns Usable
User<? extends Usable> user = getUser(); //returns User<? extends Usable>
user.use(usable); //compilation error.
}
public Usable getUsable() {
....
}
public User<? extends Usable> getUser() {
....
}
}
コンパイルエラーは、期待されるタイプはです<? extends Usable>
が、渡されるタイプはUsable
です。この問題を回避するにはどうすればよいですか?制約は次のとおりです。
- クライアントコード( )は、および(サブタイプ
UserDemo
ではなく)でのみ機能します。User
Usable
- ユーザーは、タイプがのサブタイプであるオブジェクトでのみ作業できます
Usable
。