泛型第三课,自定义泛型、无多态、通配符、无泛型数组

2024-09-07 01:58

本文主要是介绍泛型第三课,自定义泛型、无多态、通配符、无泛型数组,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

泛型没有多态

package com.pkushutong.genericity4;/*** 多态的两种形式* 注:泛型没有多态* @author dell**/
public class Test01 {public static void main(String[] args) {Fruit f = new Fruit();test(new Apple());}//形参使用多态public static void test(Fruit f){}//返回类型使用多态public static Fruit test02(){return new Apple();}
}

通配符:? extends super

  1. 可以用来声明类型及声明方法参数上,不能用在声明类上
  2. ?可以接受泛型的任意类型,只能接受和输出不能修改(方法声明时参数无法正确知道具体的类型,因此不能修改)
  3. ?extends:泛型上线 <=
  4. ?super:泛型下限 >=
package com.pkushutong.genericity4;
/*** ?表示类型不定,使用时确定类型* ?的使用:声明类型,声明方法上,不能声明类或使用时* ?extends:小于等于上限,指定类型子类或自身* ?super:大于等于下限,指定类型为自身或父类* @author dell** @param <T>*/
public class Student<T> {T score;public static void main(String[] args) {Student<?> stu = new Student<String>();test(new Student<Integer>());test2(new Student<Apple>());test3(new Student<Object>());}public static void test(Student<?> stu){}//?extends:小于等于上限,指定类型子类或自身public static void test2(Student<? extends Fruit> tru){}//??super:大于等于下限,指定类型为自身或父类public static void test3(Student<? super Fruit> tru){}
}

泛型嵌套

  1. 声明:嵌套使用泛型 A<B<C>> a = new A<B<C>>();
  2. 使用:从外到内,一层层拆分,稍微复杂一些,与调用没有任何的关系,只是确定了类型而已
package com.pkushutong.genericity4;public class BjPku<T>{T stu;public static void main(String[] args) {//泛型的嵌套BjPku<Student<String>> rom = new BjPku<Student<String>>();rom.stu = new Student<String>();//从外到内拆分Student<String> stu = rom.stu;String score = stu.score;System.out.println(score);}}

泛型与数组

  1. 没有泛型数组,不能创建泛型数组
  2. 可以只有声明,可以使用?
  3. A<String>[] a1 = null;
  4. A<?>[] a2 = new A<?>[10];

jdk7泛型改进

jdk7改进:声明时指定泛型即可,创建对象不用再次编写类型

如 A<String> a = new A<>();


这篇关于泛型第三课,自定义泛型、无多态、通配符、无泛型数组的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1143736

相关文章

如何自定义Nginx JSON日志格式配置

《如何自定义NginxJSON日志格式配置》Nginx作为最流行的Web服务器之一,其灵活的日志配置能力允许我们根据需求定制日志格式,本文将详细介绍如何配置Nginx以JSON格式记录访问日志,这种... 目录前言为什么选择jsON格式日志?配置步骤详解1. 安装Nginx服务2. 自定义JSON日志格式各

Android自定义Scrollbar的两种实现方式

《Android自定义Scrollbar的两种实现方式》本文介绍两种实现自定义滚动条的方法,分别通过ItemDecoration方案和独立View方案实现滚动条定制化,文章通过代码示例讲解的非常详细,... 目录方案一:ItemDecoration实现(推荐用于RecyclerView)实现原理完整代码实现

C++原地删除有序数组重复项的N种方法

《C++原地删除有序数组重复项的N种方法》给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度,不要使用额外的数组空间,你必须在原地修改输入数组并在使用O(... 目录一、问题二、问题分析三、算法实现四、问题变体:最多保留两次五、分析和代码实现5.1、问题分析5.

基于Spring实现自定义错误信息返回详解

《基于Spring实现自定义错误信息返回详解》这篇文章主要为大家详细介绍了如何基于Spring实现自定义错误信息返回效果,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录背景目标实现产出背景Spring 提供了 @RestConChina编程trollerAdvice 用来实现 HTT

SpringSecurity 认证、注销、权限控制功能(注销、记住密码、自定义登入页)

《SpringSecurity认证、注销、权限控制功能(注销、记住密码、自定义登入页)》SpringSecurity是一个强大的Java框架,用于保护应用程序的安全性,它提供了一套全面的安全解决方案... 目录简介认识Spring Security“认证”(Authentication)“授权” (Auth

Java中数组转换为列表的两种实现方式(超简单)

《Java中数组转换为列表的两种实现方式(超简单)》本文介绍了在Java中将数组转换为列表的两种常见方法使用Arrays.asList和Java8的StreamAPI,Arrays.asList方法简... 目录1. 使用Java Collections框架(Arrays.asList)1.1 示例代码1.

SpringBoot自定义注解如何解决公共字段填充问题

《SpringBoot自定义注解如何解决公共字段填充问题》本文介绍了在系统开发中,如何使用AOP切面编程实现公共字段自动填充的功能,从而简化代码,通过自定义注解和切面类,可以统一处理创建时间和修改时间... 目录1.1 问题分析1.2 实现思路1.3 代码开发1.3.1 步骤一1.3.2 步骤二1.3.3

dubbo3 filter(过滤器)如何自定义过滤器

《dubbo3filter(过滤器)如何自定义过滤器》dubbo3filter(过滤器)类似于javaweb中的filter和springmvc中的intercaptor,用于在请求发送前或到达前进... 目录dubbo3 filter(过滤器)简介dubbo 过滤器运行时机自定义 filter第一种 @A

C++一个数组赋值给另一个数组方式

《C++一个数组赋值给另一个数组方式》文章介绍了三种在C++中将一个数组赋值给另一个数组的方法:使用循环逐个元素赋值、使用标准库函数std::copy或std::memcpy以及使用标准库容器,每种方... 目录C++一个数组赋值给另一个数组循环遍历赋值使用标准库中的函数 std::copy 或 std::

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::