我需要在客户端代码中使用泛型类及其类型参数。
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
.