java 泛型 父子_使用通配符和泛型:完成父子類關系的List對象的類型匹配

泛型和通配符

使用泛型和通配符都可以讓一個方法所表示的算法邏輯適應多種類型。

Java中具備繼承關系的類A、B(A extends B)它們的集合List和List之間是沒有繼承關系的,

可以使用泛型或通配符來讓一個方法支持同時接受List和List

代碼場景

這里分別定義類Animal、Dog和Cat,很顯然,Dog和Cat是Animal的子類。

它們的簡單定義如下:

abstract class Animal {

public abstract boolean afraidOf(Animal other);

}

class Cat extends Animal {

@Override

public boolean afraidOf(Animal other) {

if (other instanceof Dog) {

return true;

}

return false;

}

}

class Dog extends Animal {

@Override

public boolean afraidOf(Animal other) {

if (other instanceof Cat) {

return false;

}

return true;

}

}

上面Animal類定義了boolean afraidOf(Animal other)方法,表示一個動物是否害怕另一個動物。

可以看到Cat和Dog有著不同的表現。

假設有下面需求:

從一個List中找到某個Animal對象害怕的所有其它動物。

對應有以下的API方法:

public List findScaredAnimals(List animals, Animal who) {

//...

}

如果這時有List或者List這種,也應該是支持的。

可以通過通配符或者泛型方法實現。

通配符實現

使用List extends Animal>這樣的形參,就可以接收集合項為Animal子類的任意List。

public List findScaredAnimals(List extends Animal> animals, Animal who) {

//...

}

這時就可以這樣調用了:

List dogs;

....

findScaredAnimals(dogs, animal);

...

其他Animal子類的List都是可以的。

泛型方法實現

拋開實際意義,假設需要findScaredAnimals()中,返回值和參數對應的具體Animal子類型是一致的,那么就需要用到泛型了:

public List findScaredAnimals(List animals, T who) {

//...

}

可以看到,泛型類型參數T同時約束了多個地方。

泛型參數也可以是多個的,而且之間存在關系。

小結

以上通過一個不太實際的案例說明了使用泛型和通配符來解決List泛型集合之間的“匹配”問題。這也是它們的主要用途之一。

(本文使用Atom編寫)

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

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

相關文章

重定向描述符

文件描符 縮寫 描述 0 STDIN 標準輸入 1 STDOUT 標準輸出 2 STDERR 標準錯誤 1、重定向錯誤和數據 1234[rootlogicserver tmp]# ls -al data1 haha 2> qingyun.txt 1&g…

NodeJS學習筆記(一)——搭建開發框架Express,實現Web網站登錄驗證

目錄 開發環境  1、建立工程  2、目錄結構  3、Express配置文件  4、Ejs模板  5、安裝常用庫及頁面分離  6、路由  7、session  8、頁面訪問控制及提示JS是腳本語言,腳本語言都需要一個解析器才能運行。對于寫在HTML頁面里 的JS,瀏覽器充…

LeetCode-208 Implement Trie (Prefix Tree)

題目描述 Implement a trie with insert, search, and startsWith methods. 題目大意 實現對一棵樹的插入、搜索以及前序查找操作。 (樹的每個節點代表一個小寫字母,從根節點到葉節點代表一個完整的單詞) 示例 E Trie trie new Trie();trie.…

react組件生命周期_React組件生命周期-掛鉤/方法介紹

react組件生命周期React components have several lifecycle methods that you can override to run your code at a particular time in the process.React組件具有幾種生命周期方法,您可以重寫它們以在流程中的特定時間運行代碼。 In this video, Nick Karnik de…

(馬世龍)Linux下CACTI完全搭建技術文檔二

續(馬世龍)Linux下CACTI完全搭建技術文檔一 6.完成cacti的安裝1. 首先檢查一下rra/下面,有沒有數據2. snmpwalk -v 2c -c public ServerIP if 用來測試被控對象(serverIP)是否開啟了SNMP服務3. snmpwalk -v 2c ServerIP -c public .1.3.6.1.4…

項目經理如何管理情緒?這三本書管理書籍你必須要看

本文主要是介紹三本管理的書籍,需要全部書籍的可以加Q群375508415去拿走。里面很多大神的PMP資料。 大家有沒有覺得項目經理有時像個政委,做員工思想工作; 有時像個HR,操心員工的穩定和發展; 有時像個咨詢顧問&#xf…

java 外部接口調用 設計模式_《Java設計模式》之接口模式

-----------模式是思想的體現,而非具體的實現。抽象的講,類的接口是類允許其他類對象訪問的方法與字段集。接口通常代表一種承諾,即方法需要實現接口方法名表示的操作,遵循代碼注釋和其他文檔說明,類的實現就是方法體中…

BFS(廣度優先搜索)

Catch That Cow Farmer John has been informed of the location of a fugitive cow and wants to catch her immediately. He starts at a point N (0 ≤ N ≤ 100,000) on a number line and the cow is at a point K (0 ≤ K ≤ 100,000) on the same number line. Farmer …

leetcode111. 二叉樹的最小深度(隊列)

給定一個二叉樹,找出其最小深度。最小深度是從根節點到最近葉子節點的最短路徑上的節點數量。說明: 葉子節點是指沒有子節點的節點。示例:給定二叉樹 [3,9,20,null,null,15,7],3/ \9 20/ \15 7 返回它的最小深度 2.代碼 /*** Definition for a binary tree no…

企業網站6個常見的優化漏洞

導讀:企業做營銷網站目的,就是希望通過網絡營銷,挖掘目標客戶。目標客戶怎么來,那就需要通過網站優化,把網站關鍵詞優化排名到首頁,這樣才能更多的機會被潛在客戶點擊。很多企業網站上線之前,沒…

aspx 微型_最初的十億分鐘:正在向世界授課的微型非營利組織背后的數字

aspx 微型by Quincy Larson昆西拉爾森(Quincy Larson) 最初的十億分鐘:正在向世界授課的微型非營利組織背后的數字 (The First Billion Minutes: The Numbers Behind the Tiny Nonprofit That’s Teaching the World to Code) People have now spent more than 1 b…

[RN] React Native 自定義導航欄隨滾動漸變

React Native 自定義導航欄隨滾動漸變 實現效果預覽: 代碼實現: 1、定義導航欄 NavPage.js import React, {Component} from react; import {View, Text, Image, StyleSheet, TouchableOpacity, Platform, Dimensions} from react-native;/*** 自定義導航…

【CSS 技能提升】 :before和:after的使用

前幾天的晚上較全面的去看了下css的一些文檔和資料,大部分的樣式運用都沒什么大問題了,只是有些許較陌生,但是也知道他們的存在和實現的是什么樣式。今天主要想在這篇學習筆記中寫的也不多,主要是針對:before和:after寫一些內容&a…

c語言模擬java面向對象_純c語言實現面向對象分析與示例分享

#include #include //接口#ifndef Interface#define Interface struct#endif//類#ifndef Class#define Class struct#endif//抽象形狀類Class Shape;typedef Class Shape shape;//抽象形狀類的方法聲明shape* Shape(int edges);int shape_getEdges(shape *);int shape_getArea(…

leetcode152. 乘積最大子數組

給你一個整數數組 nums ,請你找出數組中乘積最大的連續子數組(該子數組中至少包含一個數字),并返回該子數組所對應的乘積。 示例 1: 輸入: [2,3,-2,4] 輸出: 6 解釋: 子數組 [2,3] 有最大乘積 6。 代碼 class Solution {publi…

成功試驗基于C#/.NET的Android開發

今天最開心事情莫過于摸索驗證了一個事情,C#也能進行Android和IOS開發,白天安裝了開發環境,晚上進行測試,直到此時此刻,已經成功的導出一款基于C#/.NET的安卓APK,并且能夠成功的導入到安卓手機運行&#xf…

使用機器學習預測天氣_如何使用機器學習根據文章標題預測喜歡和分享

使用機器學習預測天氣by Flavio H. FreitasFlavio H.Freitas著 如何使用機器學習根據文章標題預測喜歡和分享 (How to predict likes and shares based on your article’s title using Machine Learning) Choosing a good title for an article is an important step in the …

深入理解了MySQL,你才能說熟悉數據庫

先拋出幾個問題 1.為什么不建議使用訂單號作為主鍵?2.為什么要在需要排序的字段上加索引?3.for update 的記錄不存在會導致鎖住全表?4.redolog 和 binlog 有什么區別?5.MySQL 如何回滾一條 sql ?6.char(50) 和 varchar(50) 效果是一樣的么?索引知識回顧 對于 MySQL 數據庫…

ibatis mysql 自增_mybatis自增主鍵

簡單介紹:在使用mybats插入數據是,有很多需要和id關聯的其他數據,所以在插入一條信息時獲取其主鍵信息是很常見的操作。一 mysql數據庫的主鍵自增(int類型的主鍵)1 創建一個表,設置表的id(此id必須是int類型),設置為au…

DataGridView控件用法二:常用屬性

通常會設置的DataGridView的屬性如下: AllowUserToAddRows - False指示是否向用戶顯示用于添加行的選項,列標題下面的一行空行將消失。一般讓其消失。AllowUserToDeleteRows - False指示是否允許用戶從DataGridView刪除行。一般不允許。AllowUserToOrder…