有一个泛型类 A
class A
{
public void test(T val)
{
val.say();
}
}
然后具有父子关系的普通类:
class Person {
}
class Male extends Person {
public void say()
{
System.out.println("i am male");
}
}
使用通配符代码运行以下代码后,无法执行!这是为什么?
class App {
public static void main(String[] args)
{
// male 实例
Male male = new Male();
// 泛型类 A
A maleA = new A<>();
// 泛型类 A extends Person>
A extends Person> personA = maleA;
// 这个地方为什么报错?
// 我看书中的解释是说 A extends Person> 中
// 由于 ? 是通配符,虽然意思表明需要提供的类型
// 为 Person 的子类型,但是由于通配符的原因
// 导致该方法实际上是拒绝任何类型的
// 所以实际上是成了无法调用的方法
// 这是为什么?
personA.test(male);
}
}
使用了 ? 通配符后,即使提供正确的参数也无法成功调用(从代码上看...),这是为什么?