首页 > 其他分享 >章15——泛型generic

章15——泛型generic

时间:2024-09-27 20:48:26浏览次数:8  
标签:15 generic arrayList Dog add arrayList1 泛型 new

泛型的引入

泛型引入前后代码的比较

public static void main(String[] args) {
        ArrayList arrayList = new ArrayList();
        arrayList.add(new Dog("wang",10));
        arrayList.add(new Dog("xin",1));
        arrayList.add(new Dog("ran",5));

        //遍历
        for (Object o :arrayList) {
            //需要向下转型
            Dog dog = (Dog) o;
            System.out.println(dog.getName());
        }

        //表示存放到该集合中的元素只能是DOG类型或者其子类型
        //如果编译器发现不满足要求就会报错
        ArrayList<Dog> arrayList1 = new ArrayList<Dog>();
        arrayList1.add(new Dog("wang",10));
        arrayList1.add(new Dog("xin",1));
        arrayList1.add(new Dog("ran",5));

        //遍历时候可以直接取出DOG类型而非OBJECT
        //因为编译器明白,一定能取出DOG类
        for (Dog dog : arrayList1) {
            System.out.println(dog.getName());
        }


    }
}

泛型介绍
泛型是一种可以表示(接收)数据类型的数据类型。

class Person3<E>{
    //属性的类型是在创建或者定义PERSON时去指定一个
    //或者是某个方法的返回值类型,参数类型
    E s;
    public Person3(E s){
        this.s = s;
    }
    public E f(){
        return s;
    }

    public void t(){
        //此处的显示是变化的,E可以表示数据类型的一种
        System.out.println(s.getClass());
    }
}

泛型的语法

泛型的使用细节

自定义泛型
自己写了个类或者接口,然后自己规定泛型,C++中的模板。

静态方法是和对象没有关系的,所以无法判断泛型是什么类型。
所以静态数据成员和静态成员方法都不可以用泛型。
在类加载时对象还没有创建。
JVM无法完成初始化。

使用泛型的数组不可以初始化,如下:
及不可以直接实例化。

创建对象时不指定泛型类型是OK的,不一定非要<>才可以构建。但是此时所有泛型全都指定为OBJECT。

如上,接口中定义的成员不能使用泛型.

继承接口时:

当调用方法时,传入参数,编译器就会确定类型。(直接往里面传参数就OK了)
方法分为泛型方法(必须新自定义泛型),和仅仅使用了泛型的方法。

泛型的继承和通配符

图片中的第一条代码是不允许的,因为泛型不具有继承性。

通配符用于定义了泛型的类作为参数时,比如系统定义或者自定义,规定了接收使用了何种泛型的类,如下图:

JUNIT

在方法上方@Test alt + enter,一般是在JUNIT5.4

标签:15,generic,arrayList,Dog,add,arrayList1,泛型,new
From: https://www.cnblogs.com/gknives/p/18432993

相关文章

  • 超全的百度AI产品矩阵:15款神器如何重塑我们的未来?
    大家好,我是Shelly,一个专注于输出AI工具和科技前沿内容的AI应用教练,体验过300+款以上的AI应用工具。关注科技及大模型领域对社会的影响10年+。关注我一起驾驭AI工具,拥抱AI时代的到来。探秘百度AI的奇妙世界:15款神器如何重塑我们的未来?亲爱的朋友们,你们有没有想过,科技的力量究......
  • 8,(经典面试题:分组求topN)Python数分之Pandas训练,力扣,1532. 最近的三笔订单
    学习:知识的初次邂逅复习:知识的温故知新练习:知识的实践应用目录一,原题力扣链接二,题干三,建表语句四,分析五,Pandas解答六,验证七,知识点总结一,原题力扣链接.-力扣(LeetCode)二,题干表:Customers+---------------+---------+|ColumnName|Type|+------......
  • C语言 15 预处理
    C语言学习已经快要接近尾声了,但是有一个东西迟迟还没有介绍,就是一直在写的:#include<stdio.h>这到底是个什么东西,为什么每次都要加上呢?这里将详细讨论它缘由。C语言中带#号的指令并不是C关键字的一部分,不属于C语言。带#号的指令是写给编译器看的,告诉它一些事情,好让......
  • Leetcode 154. 寻找旋转排序数组中的最小值 II
    1.题目基本信息1.1.题目描述已知一个长度为n的数组,预先按照升序排列,经由1到n次旋转后,得到输入数组。例如,原数组nums=[0,1,4,4,5,6,7]在变化后可能得到:若旋转4次,则可以得到[4,5,6,7,0,1,4]若旋转7次,则可以得到[0,1,4,4,5,6,7]注意,数组[a[0],a[1],a[2],......
  • [ARC115E] LEQ and NEQ 题解
    我这场打的VP,结果E思考的时间比A还少。。但是我觉得我能想出这道题还是很有意义的,写篇题解记录一下。首先应该都不难想到动态规划吧?我们先使用暴力DP:设\(dp_{i,j}\)表示处理完前\(i\)个数,第\(i\)个数为\(j\)的方案数。我们考虑进行分类讨论:\(a_i≥a_{i-1}\):此时......
  • [CERC2015] Digit Division 题解
    \(O(n^2)\)做法和大部分人最开始一样,我也想的是DP。设\(dp_i\)表示用前面\(i\)个字符拆分得到的答案。既然是统计方案数,我们肯定是根据前面的答案累加。考虑在\([1,i-1]\)中选择一个\(j\),如果\([j+1,i]\)的字符组成的数字能够被\(m\)整除,那么\(dp_i\)就可以累加......
  • [JLOI2015] 有意义的字符串 题解
    拿到题目,我们首先分析一下这个奇怪的式子:\[\lfloor(\frac{b+\sqrt{d}}{2})^n\rfloor~\text{mod}~p\]重点肯定是在里面的那个式子里面,最显眼的肯定也就是那个\(\sqrt{d}\),根据整体形式,我们可以联系一元二次方程的求根公式\(x=-\dfrac{-b\pm\sqrt{b^2-4ac}}{2a}\),这里也是一......
  • 面试经典 150 题:力扣88. 合并两个有序数组
    每周一道算法题启动题目【题目链接】【解法一】合并后排序排序后的数组自动省略0的数字,又学到了classSolution{public:voidmerge(vector<int>&nums1,intm,vector<int>&nums2,intn){//合并两个数组后排序for(inti=0;i<n;i++)......
  • 易优CMS网站SQLSTATE[HY000]: General error: 1615 Prepared statement needs to be r
    当你遇到“SQLSTATE[HY000]:Generalerror:1615Preparedstatementneedstobere-prepared”的错误时,这通常是因为数据库连接配置中的某些参数不正确。具体来说,这可能是因为数据库驱动程序在某些环境下需要特定的配置才能正常工作。解决方法找到数据库配置文件打开数据......
  • 【JAVA-数据结构】包装类&简单认识泛型(1)
        这篇包含包装类和泛型相关知识,会用两篇文章进行讲解。1包装类        在Java中,由于基本类型不是继承自Object,为了在泛型代码中可以支持基本类型,Java给每个基本类型都对应了一个包装类型。1.1基本数据类型和对应的包装类除了Integer和Character......