泛型知識匯總

在這里插入圖片描述


在這里插入圖片描述


在這里插入圖片描述


在這里插入圖片描述


在這里插入圖片描述


在這里插入圖片描述

演示代碼:

package exercise;import java.util.Arrays;public class MyArrayList<E> {Object[] obj = new Object[10];int size;public boolean add(E e) {obj[size] = e;size++;return true;}public E get(int index) {return (E) obj[index];}//沒有這個函數,無法看到obj內部的值public String toString() {return Arrays.toString(obj);}
}

測試:

package exercise;public class Test {public static void main(String[] args) {MyArrayList<String> list = new MyArrayList<>();list.add("sunshine");list.add("jiuselu");list.add("kukuhsui");System.out.println(list);System.out.println(list.get(0));}
}

在這里插入圖片描述
在這里插入圖片描述

代碼演示:

package exercise;import java.util.ArrayList;public class ListUtil {private ListUtil() {}//泛型要寫在修飾符后,public、static都是,寫在后面的修飾符后。public static <E> void addAll(ArrayList<E> list, E e1, E e2, E e3, E e4) {list.add(e1);list.add(e2);list.add(e3);list.add(e4);}//可以實現任意參數加入集合public static<E> void addAll1(ArrayList<E> list,E...e){for (E element : e) {list.add(element);}}}

測試類:

package exercise;import java.util.ArrayList;public class Test {public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();ListUtil.addAll(list,"sunshine","jiuselu","lulushui","zechao");System.out.println(list);ArrayList<String> list1 = new ArrayList<>();ListUtil.addAll1(list1,"sunshine");System.out.println(list1);}
}

在這里插入圖片描述
代碼演示:

方法一:

在這里插入圖片描述

方法二:

在這里插入圖片描述

package exercise;public class Test {public static void main(String[] args) {//泛型接口的兩種使用方式//1.實現類給出的具體類型MyArrayList list = new MyArrayList();list.add("sunshine");//2.實現類延續泛型,創建實現類對象時再確定類型MyArrayList1<String> list1 = new MyArrayList1<>();list1.add("jiuselu");}
}

在這里插入圖片描述

package exercise;import java.util.ArrayList;public class Demo1 {public static void main(String[] args) {//泛型不具備繼承性,但數據具備繼承性ArrayList<Ye> list1 = new ArrayList<>();ArrayList<Fu> list2 = new ArrayList<>();ArrayList<Zi> list3 = new ArrayList<>();method1(list1);method1(list2);method1(list3);list1.add(new Ye());list1.add(new Fu());list1.add(new Zi());method2(list1);method2(list2);method2(list3);}/*此時,泛型里面寫的是什么類型,那就只能傳遞什么類型的數據弊端:利用泛型方法有一個小弊端,它可以接受任意類型數據比如 Ye Fu Zi希望:本方法雖然不確定類型,但是我希望洗后只傳遞Ye Fu Zi此時,我們就可以使用泛型的通配符:?:表示不確定的類型它可以進行類型的限定? extend E :表示可以傳遞E或者E所有子類類型? super E :表示可以傳遞E和E的所有父類類型應用場景:1.如果我們在定義類、方法、接口的時候,如果類型不確定,就可以定義泛型類、泛型方法、泛型接口。2.如果類型不確定,但是能知道以后只能傳遞某個繼承體系中的,就可以使用泛型的通配符泛型的通配符:關鍵點:可以限定類型的范圍*/public static void method1(ArrayList<? extends Ye> list) {}public static void method2(ArrayList<? super Zi> list) {}
}class Ye {
}class Fu extends Ye {
}class Zi extends Fu {
}

補充;一個<>中可以寫多個類型
在這里插入圖片描述


案例
在這里插入圖片描述

package exercise;import javax.swing.*;
import javax.swing.plaf.synth.SynthTextAreaUI;
import javax.swing.text.AbstractDocument;
import java.util.ArrayList;
import java.util.List;public class Demo2 {public static void main(String[] args) {ArrayList<ChineseCat> list1 = new ArrayList<>();ArrayList<PersianCat> list2 = new ArrayList<>();ArrayList<HuskyDog> list3 = new ArrayList<>();ArrayList<Teddy> list4 = new ArrayList<>();keepPet1(list1);keepPet1(list2);keepPet2(list3);keepPet2(list4);}public static void keepPet1(ArrayList<? extends Cat> list) {}public static void keepPet2(ArrayList<? extends Dog> list) {}public static void keepPet3(ArrayList<? extends Animal> list) {}
}abstract class Animal {private String name;private int age;public abstract void eat();public Animal() {}public Animal(String name, int age) {this.name = name;this.age = age;}/*** 獲取** @return name*/public String getName() {return name;}/*** 設置** @param name*/public void setName(String name) {this.name = name;}/*** 獲取** @return age*/public int getAge() {return age;}/*** 設置** @param age*/public void setAge(int age) {this.age = age;}public String toString() {return "Animal{name = " + name + ", age = " + age + "}";}
}abstract class Cat extends Animal {//1.繼承抽象類,重寫里面所有的方法。//2.本身cat也是一個抽象的,讓Cat的子類在重寫方法//此時采取第二種處理方案//因為貓的兩個子類中的eat的方法體還是不一樣的
}class PersianCat extends Cat {public void eat() {System.out.println("一只叫做" + this.getName() + "的" + this.getAge() + "歲的波斯貓,正在吃小餅干。");}
}class ChineseCat extends Cat {public void eat() {System.out.println("一只叫做" + this.getName() + "的" + this.getAge() + "歲的貍花貓,正在吃魚。");}
}abstract class Dog extends Animal {
}class Teddy extends Dog {@Overridepublic void eat() {System.out.println("一只叫做" + getName() + "的," + getAge() + "歲的泰迪,正在吃骨頭,邊吃邊蹭");}
}class HuskyDog extends Dog {@Overridepublic void eat() {System.out.println("一只叫做" + getName() + "的," + getAge() + "歲的哈士奇,正在吃骨頭,邊吃邊拆家");}
}

在這里插入圖片描述
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/20771.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/20771.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/20771.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

現代信號處理12_譜估計的4種方法(CSDN_20240602)

Slepian Spectral Estimator(1950) 做譜估計的目標是盡可能看清楚信號功率譜在某一個頻率上的情況&#xff0c;假設我們想了解零頻時的分布&#xff0c;最理想的情況是濾波器的傳遞函數H(ω) 是一個沖激函數&#xff0c;這樣就沒有旁瓣&#xff0c;也就沒有泄漏&#xff1b;其次…

【OpenHarmony】TypeScript 語法 ③ ( 條件語句 | if else 語句 | switch case 語句 )

文章目錄 一、條件語句1、if else 語句2、switch case 語句 參考文檔 : <HarmonyOS第一課>ArkTS開發語言介紹 一、條件語句 1、if else 語句 TypeScript 中的 if 語句 / if else 語句 用法 , 與 JavaScript 語言中的 if 語句 / if else 語句 語法 基本相同 ; if else 語…

使用Java構建RESTful API:實現靈活、可擴展的Web服務

RESTful API已經成為構建現代Web應用的標準之一&#xff0c;它通過簡單的HTTP協議進行通信&#xff0c;提供了一種輕量級、靈活、可擴展的方式來構建和管理Web服務。Java作為一種強大的編程語言&#xff0c;提供了許多框架和庫來幫助開發者構建高效的RESTful API。本文將探討如…

項目質量管理

目錄 1.概述 2.三個關鍵過程 2.1.規劃質量管理&#xff08;Plan Quality Management&#xff09; 2.2.管理質量&#xff08;Manage Quality&#xff09; 2.3.控制質量&#xff08;Control Quality&#xff09; 3.應用場景 3.1.十個應用場景 3.2.產品設計與開發 4.小結…

使用PyCharm 開發工具創建工程

一. 簡介 前面學習了 安裝 python解釋器。如何安裝python的一種開發工具 PyCharm。 本文來簡單學習一下&#xff0c;如何使用 PyCharm 開發工具創建一個簡單的 python工程。 二. PyCharm 開發工具創建一個工程 1. 首先&#xff0c;首先打開PyCharm 開發工具。選擇 創建一…

Docker部署SiYuan筆記-Unraid

使用unraid的docker部署SiYuan筆記&#xff0c;簡單記錄 筆記說明 Siyuan筆記是一款基于markdown語法的筆記工具&#xff0c;具有活躍的社區和多設備支持。大部分功能都是免費&#xff0c;源代碼開源&#xff0c;支持插件安裝&#xff0c;具有很不錯的使用體驗。 Docker地址&a…

linux---生產者和消費者模型

生產者消費者模式就是通過一個容器來解決生產者和消費者的強耦合問題。生產者和消費者彼此之間不直接通訊&#xff0c;而通過阻塞隊列來進行通訊&#xff0c;所以生產者生產完數據之后不用等待消費者處理&#xff0c;直接扔給阻塞隊列&#xff0c;消費者不找生產者要數據&#…

2024年海南省三支一扶報名指南,照片要求

2024年海南省三支一扶報名指南&#xff0c;照片要求 一、考試時間安排&#xff1a; 報名時間&#xff1a;6月1日8:00至6月7日18:00 準考證打印時間&#xff1a;6月17日8:00 考試時間&#xff1a;6月22日 二、招聘人數 海南省計劃招募390名高校畢業生

STM32_IIC

1、IIC簡介 I2C&#xff0c;即Inter IC Bus。是由Philips公司開發的一種串行通用數據總線&#xff0c;主要用于近距離、低速的芯片之間的通信&#xff1b;有兩根通信線&#xff1a;SCL&#xff08;Serial Clock&#xff09;用于通信雙方時鐘的同步、SDA&#xff08;Serial Data…

JVM之【執行引擎】

執行引擎 執行引擎是JVM的核心組件之一&#xff0c;它負責將Java字節碼文件轉換為機器指令并執行。這一過程涉及多個組成部分&#xff0c;各部分協同工作來完成字節碼到機器指令的轉換和執行。以下是執行引擎的主要組成部分及其作用&#xff1a; 1. 解釋器&#xff08;Interp…

vue.js框架快速入門

Vue.js是一個漸進式JavaScript框架&#xff0c;用于構建用戶界面和單頁應用程序。以下是Vue.js快速入門的基本步驟和概念&#xff1a; 1. 環境準備 確保你的計算機上安裝了Node.js&#xff0c;它包括npm&#xff08;Node Package Manager&#xff09;&#xff0c;用于管理項目…

友善RK3399v2平臺利用rkmpp實現硬件編解碼加速

測試VPU 編譯mpp sudo apt update sudo apt install gcc g cmake make cd ~ git clone https://github.com/rockchip-linux/mpp.git cd mpp/build/linux/aarch64/ sed -i s/aarch64-linux-gnu-gcc/gcc/g ./arm.linux.cross.cmake sed -i s/aarch64-linux-gnu-g/g/g ./arm.lin…

如何學習ai agent?

如何學習Agent&#xff0c;推薦閱讀《動手做AI Agent》這本書。 推薦理由&#xff1a; 1&#xff1a;一本書能夠全方位了解并探索Agent的奧秘&#xff01; &#xff08;1&#xff09;Agent的發展進程。 &#xff08;2&#xff09;可以幫我們做哪些事&#xff1a;自動辦公&am…

TypeScript 中的迭代器和生成器

1. 迭代器 迭代器是一種對象&#xff0c;它提供了一種統一的方式來訪問集合中的元素&#xff0c;而不暴露集合的內部結構。在 TypeScript 中&#xff0c;迭代器通過實現 Iterator 接口來定義。 interface Iterator<T> {next(): IteratorResult<T>; }interface It…

Liunx登錄時相關bash配置文件(登錄腳本)

profile類的文件&#xff1a;設定環境變量&#xff0c;運行命令或腳本 bashrc類的文件&#xff1a;定義命令別名 全局配置&#xff1a; /etc/profile /etc/profile.d/*.sh /etc/bashrc 個人配置文件: ~/.bash_profile ~/.bashrc 用戶登錄時加載bash配置文件的過程&#xff0c;…

碼隨想錄算法訓練營第二十四天| 77. 組合

77. 組合 - 力扣&#xff08;LeetCode&#xff09; class Solution {ArrayList<Integer> path new ArrayList<>();ArrayList<List<Integer>> result new ArrayList<>();public List<List<Integer>> combine(int n, int k) {if(n &…

升級Jenkins從2.263.3到2.440.2

升級Jenkins從2.263.3到2.440.2 ###任何一次升級前&#xff0c;先做整體備份&#xff0c;同時最好對plugins目錄和config.xml單獨備份。 ###對于任何一次插件安裝&#xff0c;務必安裝前先備份當前的plugins目錄&#xff0c;這是血的教訓。升級過程 1、 升級2.263.3到2.263.4…

15-通過JS代碼處理窗口滾動條

selenium并不是萬能的&#xff0c;頁面上有些操作無法實現時&#xff0c;就需要借助JS代碼來完成了。selenium提供了一個方法&#xff1a;execute_script()&#xff0c;可以執行JS腳本代碼。 比如&#xff1a;當頁面上的元素超過一屏后&#xff0c;想操作屏幕下方的元素&#x…

MyBatis查詢功能

MyBatis的各種查詢功能 1、若查詢出的數據只有一條 &#xff08;1)可以通過實體類對象或者集合接收 (2)可以通過List集合接收 (3&#xff09;可以通過map集合接收 結果&#xff1a;{password123456, sex女, id8, age22, email1234qq.com, usernameadmin4} 2、若查詢出來的數據有…

[leetcode hot 150]第一百零八題,將有序數組轉換為二叉搜索樹

題目&#xff1a;給你一個整數數組 nums &#xff0c;其中元素已經按 升序 排列&#xff0c;請你將其轉換為一棵 平衡二叉搜索樹。 給定一個有序的整數數組,我們需要構建一棵平衡的二叉搜索樹。平衡二叉樹是指任意一個節點的左右子樹的高度差不超過1。 由于給定的數組是有序的…