商务网站规划与建设课程设计,wordpress 权限修改,免费的平台,商务网站建设实验记录Java泛型老规矩#xff0c;测试一下#xff0c;下面的程序能否正常运行#xff1f;为什么#xff1f;开头测试题泛型就是实现了参数化类型#xff0c;也就是代码可以适用于多种类型。泛型是在编译期检查的#xff0c;在编译期检查类型是否安全。我认为泛型最有用的就是和…Java泛型老规矩测试一下下面的程序能否正常运行为什么开头测试题泛型就是实现了参数化类型也就是代码可以适用于多种类型。泛型是在编译期检查的在编译期检查类型是否安全。我认为泛型最有用的就是和集合类一起使用。简单实现一个泛型类型定义一个类HolderT可以理解为一个占位符。使用时可以指定T为其他对象就像测试代码一样我们可以用String替换T。一个泛型的例子泛型类和泛型接口上面的那个例子就是泛型类泛型也适用于接口我们自定义接口Gen的参数化为T因为T类型是没办法创建实例的这里传入Class对象通过反射来实例化。泛型接口泛型方法静态的方法无法使用类的类型参数如果静态方法使用泛型的能力就必须使用泛型方法(非静态的方法也可以为泛型方法)。泛型方法在返回值前定义泛型参数大概的定义如下public void test(T t){}并且泛型方法可以用在可变参数中请判断下面的程序到底执行了那个方法泛型和可变参数上面的程序是不能通过编译的错误信息为The method test(Integer) is ambiguous for the type TestG。因为在编译时test(T t)和test(Integer t)此时是一样的我们的参数是Integer的时候编译器区分不开到底调用哪个方法。通配符有时候不限制类型的时候我们可以用通配符“”比如定一个一个List这个和不限制好像没有什么区别当在map中使用的时候就能看出来有一定的用处。比如我们限制key是String类型的value可以是任意类型的时候我们可以用Map。通配符使用的时候可以设置边界关键字就是entends语法就是就是限制参数为某个类型的子类。比如MyClazz exnteds Number代表MyClazz只能使用Number或者Number的子类。看一个List中使用通配符的边界的问题源码如下list添加数据问题Integer是继承于Number按说能添加才对吧为什么添加不了了原因就是add方法的参数是E当我们使用 extends Number的时候此时的add方法的参数就变成了了 extends Number此时编译器不能确定使用的是哪个子类因此编译器就直接拒绝对参数列表中涉及通配符的方法的调用。解决这个问题的方法就是使用超类通配符语法为 super 基类型意思声明通配符是由某个特定类的任何基类来界定修改的代码如下超类通配符总结下问题1、基本类型不能作为类型参数2、一个类不能实现同一个泛型接口的两种变体简单来说就是继承的类和实现的接口的类型参数不同3、使用带有泛型参数的转型或者instanceof不会有任何效果。4、如果有两个类型参数的时候重载时有问题的代码如下重载问题还是开头的那句话泛型主要用在集合类中我们起码要在集合中使用好泛型。欢迎关注留言讨论如果有任何问题请批评指正谢谢