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

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

相关文章

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

SpringBoot 自定义消息转换器使用详解

《SpringBoot自定义消息转换器使用详解》本文详细介绍了SpringBoot消息转换器的知识,并通过案例操作演示了如何进行自定义消息转换器的定制开发和使用,感兴趣的朋友一起看看吧... 目录一、前言二、SpringBoot 内容协商介绍2.1 什么是内容协商2.2 内容协商机制深入理解2.2.1 内容

vue如何监听对象或者数组某个属性的变化详解

《vue如何监听对象或者数组某个属性的变化详解》这篇文章主要给大家介绍了关于vue如何监听对象或者数组某个属性的变化,在Vue.js中可以通过watch监听属性变化并动态修改其他属性的值,watch通... 目录前言用watch监听深度监听使用计算属性watch和计算属性的区别在vue 3中使用watchE

Java中JSON字符串反序列化(动态泛型)

《Java中JSON字符串反序列化(动态泛型)》文章讨论了在定时任务中使用反射调用目标对象时处理动态参数的问题,通过将方法参数存储为JSON字符串并进行反序列化,可以实现动态调用,然而,这种方式容易导... 需求:定时任务扫描,反射调用目标对象,但是,方法的传参不是固定的。方案一:将方法参数存成jsON字

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

hdu2241(二分+合并数组)

题意:判断是否存在a+b+c = x,a,b,c分别属于集合A,B,C 如果用暴力会超时,所以这里用到了数组合并,将b,c数组合并成d,d数组存的是b,c数组元素的和,然后对d数组进行二分就可以了 代码如下(附注释): #include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<que

hdu 1166 敌兵布阵(树状数组 or 线段树)

题意是求一个线段的和,在线段上可以进行加减的修改。 树状数组的模板题。 代码: #include <stdio.h>#include <string.h>const int maxn = 50000 + 1;int c[maxn];int n;int lowbit(int x){return x & -x;}void add(int x, int num){while

自定义类型:结构体(续)

目录 一. 结构体的内存对齐 1.1 为什么存在内存对齐? 1.2 修改默认对齐数 二. 结构体传参 三. 结构体实现位段 一. 结构体的内存对齐 在前面的文章里我们已经讲过一部分的内存对齐的知识,并举出了两个例子,我们再举出两个例子继续说明: struct S3{double a;int b;char c;};int mian(){printf("%zd\n",s

Spring 源码解读:自定义实现Bean定义的注册与解析

引言 在Spring框架中,Bean的注册与解析是整个依赖注入流程的核心步骤。通过Bean定义,Spring容器知道如何创建、配置和管理每个Bean实例。本篇文章将通过实现一个简化版的Bean定义注册与解析机制,帮助你理解Spring框架背后的设计逻辑。我们还将对比Spring中的BeanDefinition和BeanDefinitionRegistry,以全面掌握Bean注册和解析的核心原理。

C语言:柔性数组

数组定义 柔性数组 err int arr[0] = {0}; // ERROR 柔性数组 // 常见struct Test{int len;char arr[1024];} // 柔性数组struct Test{int len;char arr[0];}struct Test *t;t = malloc(sizeof(Test) + 11);strcpy(t->arr,