Java getSuperclass和getGenericSuperclass

1.官方API對這兩個方法的介紹?

getSuperclass :
返回表示此 Class 所表示的實體(類、接口、基本類型或 void)的超類的 Class。如果此 Class 表示 Object 類、一個接口、一個基本類型或 void,則返回 null。如果此對象表示一個數組類,則返回表示該 Object 類的 Class 對象。
getGenericSuperclass :
返回表示此 Class 所表示的實體(類、接口、基本類型或 void)的直接超類的Type。如果超類是參數化類型,則返回的 Type 對象必須準確反映源代碼中所使用的實際類型參數。如果以前未曾創建表示超類的參數化類型,則創建這個類型。有關參數化類型創建過程的語義,請參閱 ParameterizedType 聲明。如果此 Class 表示 Object 類、接口、基本類型或 void,則返回 null。如果此對象表示一個數組類,則返回表示 Object 類的 Class 對象。

2.二者異同點

兩個方法都是獲取超類的類型,看一個例子:

打印結果 :

?

這兩者都能獲取父類的類型,但是如果我們換成下面形式,我們就可以找到兩個方法差別。

?

上面的方法, 我們使用 ”getGenericSuperclass()” 方法獲取父類的類型, 然后重新讀一遍該方法的說明 “如果超類是參數化類型,則返回的 Type 對象必須準確反映源代碼中所使用的實際類型參數 ”。 也就是這種方式可以獲取超類的參數類型, 也就是泛型中的”Integer”類型。
但是如果上面方法我們使用 ”getSuperclass()“ 方法就會出現類型轉換錯誤 ”java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType”。

再舉一個例子
父類:

package com.itheima.mytest;public class Person<T1, T2> {}

子類:

package com.itheima.mytest;import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;public class Student extends Person<Integer, String> {@SuppressWarnings("rawtypes")public static void main(String[] args) {Student student = new Student();// getClass() 獲得該類的類類型(即類型變量)Class clazz = student.getClass();// getSuperclass() 獲得該類的父類System.out.println(clazz.getSuperclass());// getGenericSuperclass() 獲得該類帶有泛型的父類Type type = clazz.getGenericSuperclass();System.out.println(type);// Type是 Java 編程語言中所有類型的公共高級接口。它們包括原始類型、參數化類型、數組類型、類型變量和基本類型。// ParameterizedType 參數化類型,即泛型// 將Type轉化為參數化類型(即泛型)ParameterizedType p = (ParameterizedType) type;// getActualTypeArguments() 獲取參數化類型的數組,泛型可能有多個Type[] actualTypeArguments = p.getActualTypeArguments();// 將Type轉化為類型變量(即Class)Class c1 = (Class) actualTypeArguments[0];Class c2 = (Class) actualTypeArguments[1];System.out.println(c1);System.out.println(c2);}
}

?運行結果

class com.itheima.mytest.Person
com.itheima.mytest.Person<java.lang.Integer, java.lang.String>
class java.lang.Integer
class java.lang.String

3. 實際應用

記得以前使用hibernate時候, 我們會為所有Dao創建一個BaseDao, 將一般的增刪改查操作抽取到BaseDao中。
下面就是一個例子 :?

我們將增刪改查一般操作放在BaseDao中, 但是在”查”過程中, 遇到問題。當使用Hibernate拼寫HQL時候, 查一張表需要知道這張表對應的對象的名稱 . 比如”t_user”對應”User” . 那么在HQL中需要使用”User”。

在上面構造方法中,父類BaseDao中獲取子類操作類型對象 (UserDao操作User, DepartmentDao操作Department),利用泛型然后使用反射里的 ”getGenericSuperclass” 方法, 就可以獲取到對應的類型 ,進而獲取對應的className 。

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

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

相關文章

探秘微信廣告設計組:一位產品體驗設計師的日常與成長

目錄 我的工位&#xff1a;靈感與回憶的匯聚地 我們的設計&#xff1a;用心定格每一個瞬間 設計的多樣性&#xff1a;從社交廣告到過年IP形象 咖啡與工作的日常&#xff1a;從抵觸到入坑 廣告設計&#xff1a;我選擇&#xff0c;我熱愛 實習生的培養&#xff1a;實踐與思…

Qt(四)事件

文章目錄 一、概念二、&#xff08;一&#xff09;&#xff08;二&#xff09;QImage類&#xff08;三&#xff09;鼠標事件和鍵盤事件1. 鼠標事件2. 鍵盤事件 &#xff08;四&#xff09;定時器事件1. 采用定時器事件2. QTimer定時器類 三、 一、概念 事件是由窗口系統或者自…

充電樁項目

1. 多對一&#xff08;多個監測設備檢測&#xff0c;數據發送給一個服務器&#xff09; 2. 原理 充電樁溫度變化引起PT100阻值變換&#xff08;測溫電流衰減微弱&#xff0c;幾乎恒定&#xff0c;電壓隨之變化)&#xff0c;經過測溫模塊轉化成電壓的變化&#xff08;內部是電流…

小程序內容管理系統設計

設計一個小程序內容管理系統&#xff08;CMS&#xff09;時&#xff0c;需要考慮以下幾個關鍵方面來確保其功能完善、用戶友好且高效&#xff1a; 1. 需求分析 目標用戶&#xff1a;明確你的目標用戶群體&#xff0c;比如企業、媒體、個人博主等&#xff0c;這將決定系統的功…

zynq啟動和程序固化流程

普通FPGA啟動 FPGA的啟動方式主要包含主動模式、被動模式和JTAG模式。 主動模式&#xff08;AS模式&#xff09; 當FPGA器件上電時&#xff0c;它作為控制器從配置器件EPCS中主動發出讀取數據信號&#xff0c;并將EPCS的數據讀入到自身中&#xff0c;實現對FPGA的編程。這種…

Mac的系統數據怎么刪除 cleanmymac會亂刪東西嗎 cleanmymac有用嗎

作為一款專業級的蘋果電腦清理軟件&#xff0c;CleanMyMac可以精準識別系統垃圾&#xff0c;有效防止Mac系統數據被誤刪。軟件可以深入系統底層&#xff0c;清理無用的系統數據&#xff0c;優化蘋果電腦設置&#xff0c;提升Mac系統性能。有關Mac的系統數據可以刪嗎&#xff0c…

javascript如何定義數組和從數組取值,獲取數組長度

javascript如何定義數組 javascript定義數組的格式是 var 數組名[數組元素]或者 let 數組名[數組元素] javascript數組和python的列表很相似&#xff0c;真要懶的話&#xff0c;不用定義數據類型&#xff0c;不像c語言和java那樣限制數據類型。 定義數組示例代碼 <bod…

Unity Addressable魔改

新增回調 在使用過程中&#xff0c;輸出之后還需要手動拷貝到服務器上會麻煩&#xff0c;一旦未拷貝編輯器還會因為加載&#xff08;同步加載&#xff09;的問題卡死。所以可以到Unity的PacakgeCache中修改本地倉庫中的Addressable對應版本的包。找不到位置可以用everything搜…

計算機視覺之ResNet50圖像分類

前言 圖像分類是計算機視覺應用中最基礎的一種&#xff0c;屬于有監督學習類別。它的任務是給定一張圖像&#xff0c;判斷圖像所屬的類別&#xff0c;比如貓、狗、飛機、汽車等等。本章將介紹使用ResNet50網絡對CIFAR-10數據集進行分類。 ResNet網絡介紹 ResNet50網絡是由微…

Nature Protocols:整合多組學并進行因果推理的系統框架

轉載自&#xff1a;MetaAI 在生物學研究中&#xff0c;隨著實驗和計算技術的進步&#xff0c;生物系統研究產生了大量高通量數據。技術努力主要集中在提高吞吐量、降低成本和提升實驗與計算效率。因此&#xff0c;整合不同類型組學數據&#xff0c;并通過關聯分析識別關鍵因素…

linux 內核 紅黑樹接口說明

紅黑樹(rbtree)在linux內核中使用非常廣泛,cfs調度任務管理&#xff0c;vma管理等。本文不會涉及關于紅黑樹插入和刪除時的各種case的詳細描述,感興趣的讀者可以查閱其他資料。本文主要聚焦于linux內核中經典rbtree和augment-rbtree操作接口的說明。 1、基本概念 二叉樹:每個…

基于主成分分析PCA的一維時間序列信號降噪方法(Python)

主成分分析PCA是面向模式分類的特征提取最典型的工具&#xff0c;是滿足上述映射準則的一種數據壓縮的方法。作為經典的特征提取方法&#xff0c;是在不減少原始數據所包含的內在信息前提下&#xff0c;將原始數據集轉化為由維數較少的“有效”特征成分來表示&#xff0c;使其在…

GD32F303之CAN通信

1、CAN時鐘 GD32F303主時鐘頻率最大是120Mhz,然后APB1時鐘最大是60Mhz,APB2時鐘最大是120Mhz,CAN掛載在APB1總線上面 所以一般CAN的時鐘頻率是60Mhz,這個頻率和后面配置波特率有關 2、GD32F303時鐘配置 首先我們知道芯片有幾個時鐘 HXTAL&#xff1a;高速外部時鐘&#xff1…

用理解與包容對待阿斯伯格綜合征患者

在我們的社會中&#xff0c;存在著這樣一個特殊的群體——阿斯伯格綜合征患者。他們在社交互動、溝通交流和行為模式上有著獨特的表現&#xff0c;需要我們以正確的方式去理解和對待。 我們要認識到阿斯伯格綜合征是一種神經發育障礙&#xff0c;而非個人的選擇或過錯。患者可能…

AI Earth——中國城市綠地對大氣污染干沉降作用估計數據集(DDEP)應用APP

基于數學模型量化植被的干沉降過程,突破傳統站點尺度研究的局限性,結合多源衛星遙感產品形成2000-2020年中國城市綠地對PM2.5和PM10的干沉降量估計柵格數據集,對城市大氣污染防治、綠地區域規劃和城市可持續發展有重要意義. 應用結果 代碼 #導入安裝包 import os import …

本地部署,強大的面部修復與增強網絡CodeFormer

目錄 什么是 CodeFormer&#xff1f; 技術原理 主要功能 應用場景 本地部署 運行結果 結語 Tip&#xff1a; 在圖像處理和計算機視覺領域&#xff0c;面部修復和增強一直是一個備受關注的研究方向。近年來&#xff0c;深度學習技術的飛速發展為這一領域帶來了諸多突破性…

c++:面向對象的繼承特性

什么是繼承 (1)繼承是C源生支持的一種語法特性&#xff0c;是C面向對象的一種表現 (2)繼承特性可以讓派生類“瞬間”擁有基類的所有&#xff08;當然還得考慮權限&#xff09;屬性和方法 (3)繼承特性本質上是為了代碼復用 (4)類在C編譯器的內部可以理解為結構體&#xff0c;派…

BJT交流分析+共發射極(CE)放大器+單片機的中斷系統(中斷的產生背景+使用中斷重寫秒表程序+中斷優先級)

2024-7-10&#xff0c;星期三&#xff0c;16:58&#xff0c;天氣&#xff1a;陰&#xff0c;心情&#xff1a;晴。今天終于陰天啦&#xff0c;有點風涼快一點了&#xff0c;不然真要受不了了&#xff0c;然后沒有什么特殊的事情發生&#xff0c;繼續學習啦&#xff0c;加油加油…

yolov5中訓練長條型目標召回率低問題

對于長條目標長寬比比較大的目標&#xff0c;如長1000pix,寬度10pix等在訓練時masic數據增強圖片中會出現有的圖片中標簽遺失問題&#xff0c;將原來標注好的目標&#xff0c;但是在增強圖片中沒有標簽&#xff0c;就會導致召回率低的問題。 在訓練代碼中augmentations.py文件…

MATLAB——運算符

文章目錄 MATLAB——運算符算數運算符矩陣的算數運算 關系運算邏輯運算符運算優先級 MATLAB——運算符 算數運算符 MATLAB中算數運算符包括加、減、乘、除、點乘、點除等。其運算規則如下表所示&#xff1a; 運算符運算規則ABA與B相加&#xff08;A、B為數值或矩陣&#xff0…