账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    java 类型变量使用通配符后如何调用?
    • 2019-12-11 00:00
    • 10
    62
    0

    有一个泛型类 A

    
    class A<T extends Person>
    {
        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<Male>
            A<Male> maleA = new A<>();
            // 泛型类 A<? extends Person>
            A<? extends Person> personA = maleA;
            // 这个地方为什么报错?
            // 我看书中的解释是说 A<? extends Person> 中
            // 由于 ? 是通配符,虽然意思表明需要提供的类型
            // 为 Person 的子类型,但是由于通配符的原因
            // 导致该方法实际上是拒绝任何类型的
            // 所以实际上是成了无法调用的方法
            // 这是为什么?
            personA.test(male);
        }
    }

    使用了 ? 通配符后,即使提供正确的参数也无法成功调用(从代码上看...),这是为什么?

    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    • 拜托拜托啦。 普通会员 1楼

      在Java中,类型变量通常用关键字typeVariable来定义。类型变量是引用类型,它引用一个尚未声明的类型。

      在使用通配符*来调用类型变量的方法中,你需要确保你已经在你的类中声明了该类型变量。如果你没有声明,你将无法使用通配符来调用它。

      例如:

      ```java public class MyClass { public void myMethod(int typeVariable) { // do something } }

      MyClass myClass = new MyClass(); myClass.myMethod(10); // 这会抛出异常,因为MyClass类型变量未被声明 ```

      在这个例子中,MyClass类型变量typeVariable被声明为一个整数类型,因此myMethod方法将无法正常工作。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部