Class的getInterfaces与getGenericInterface区别

一、getInterfaces   返回直接实现的接口( 由于编译擦除,没有显示泛型参数
 Class<?>[]

getInterfaces()   

             确定此对象所表示的类或接口实现的接口。

确定此对象所表示的类或接口实现的接口。

如果此对象表示一个类,则返回值是一个数组,它包含了表示该类所实现的所有接口的对象。数组中接口对象顺序与此对象所表示的类的声明的 implements 子句中接口名顺序一致。例如,给定声明:

class Shimmer implements FloorWax, DessertTopping { ... }
s 的值为 Shimmer 的一个实例;表达式:
s.getClass().getInterfaces()[0];
的值为表示 FloorWax 接口的 Class 对象;
s.getClass().getInterfaces()[1];
的值为表示 DessertTopping 接口的 Class 对象。

如果此对象表示一个接口,则该数组包含表示该接口扩展的所有接口的对象。数组中接口对象顺序与此对象所表示的接口的声明的 extends 子句中接口名顺序一致。

如果此对象表示一个不实现任何接口的类或接口,则此方法返回一个长度为 0 的数组

如果此对象表示一个基本类型或 void,则此方法返回一个长度为 0 的数组。 

返回:
该类所实现的接口的一个数组。

 

二、getGenericInterface  返回直接实现的接口(包含泛型参数

 Type[]

getGenericInterfaces()  

              返回表示某些接口的 Type,这些接口由此对象所表示的类或接口直接实现。

返回表示某些接口的 Type,这些接口由此对象所表示的类或接口直接实现。

如果超接口是参数化类型,则为它返回的 Type 对象必须准确反映源代码中所使用的实际类型参数。如果以前未曾创建表示每个超接口的参数化类型,则创建这个类型。有关参数化类型创建过程的语义,请参阅 ParameterizedType 声明。

如果此对象表示一个类,则返回一个包含这样一些对象的数组,这些对象表示该类实现的所有接口。数组中接口对象顺序与此对象所表示的类的声明的 implements 子句中接口名顺序一致。对于数组类接口 CloneableSerializable 以该顺序返回。

如果此对象表示一个接口,则该数组包含表示该接口直接扩展的所有接口的对象。数组中接口对象顺序与此对象所表示的接口的声明的 extends 子句中接口名顺序一致。

如果此对象表示一个不实现任何接口的类或接口,则此方法返回一个长度为 0 的数组

如果此对象表示一个基本类型或 void,则此方法返回一个长度为 0 的数组

 

返回:
此类所实现的接口的一个数组
抛出:
GenericSignatureFormatError - 如果常规类签名不符合 Java Virtual Machine Specification, 3rd edition 规定的格式
TypeNotPresentException - 如果任意常规超接口引用不存在的类型声明
MalformedParameterizedTypeException - 如果任意常规超接口引用的参数化类型由于某种原因无法实例化

 

代码测试:

package cn.test;import java.lang.reflect.Type;public class Test {public static void printInterface(Class<?>[] cs) {System.out.print(cs.length+"\t");for(Class<?> c :cs){System.out.print(c.getCanonicalName()+"\t");}System.out.println();}public static void printInterface(Type[] cs) {System.out.print(cs.length+"\t");for(Type c :cs){System.out.print(c.toString()+"\t");}System.out.println();}public static void main(String[] args) {//IStudentSystem.out.print("IStudent.class.getInterfaces()\t");printInterface(IStudent.class.getInterfaces());       System.out.print("IStudent.class.getGenericInterfaces()\t");printInterface(IStudent.class.getGenericInterfaces());//TestSystem.out.print("Test.class.getInterfaces()\t" );printInterface(Test.class.getInterfaces());System.out.print("Test.class.getGenericInterfaces()\t");printInterface(Test.class.getGenericInterfaces());//ObjectSystem.out.print("Object.class.getGenericInterfaces()\t");printInterface(Object.class.getGenericInterfaces());System.out.print("Object.class.getInterfaces()\t" );printInterface(Object.class.getInterfaces());//voidSystem.out.print("void.class.getInterfaces()\t");printInterface(void.class.getInterfaces());System.out.print("void.class.getGenericInterfaces()\t");printInterface(void.class.getGenericInterfaces());//int[]System.out.print("int[].class.getInterfaces()\t");printInterface(int[].class.getInterfaces());System.out.print("int[].class.getGenericInterfaces()\t");printInterface(int[].class.getGenericInterfaces());}}interface IPerson<T> {}
interface IWalk<T> {}
interface IStudent extends IPerson<Test>,IWalk<Object>,Cloneable{}

 

 

运行结果:

IStudent.class.getInterfaces()	        2	cn.test.IPerson	    cn.test.IWalk	
IStudent.class.getGenericInterfaces()	3	cn.test.IPerson<cn.test.Test>	cn.test.IWalk<java.lang.Object>  interface java.lang.Cloneable	
Test.class.getInterfaces()	        0	
Test.class.getGenericInterfaces()	0	
Object.class.getGenericInterfaces()	0	
Object.class.getInterfaces()	        0	
void.class.getInterfaces()	        0	
void.class.getGenericInterfaces()	0	
int[].class.getInterfaces()	        2	java.lang.Cloneable	java.io.Serializable	
int[].class.getGenericInterfaces()	2	interface java.lang.Cloneable	interface java.io.Serializable

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/331576.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

maven配置junit5_JUnit 5和Selenium –改善项目配置

maven配置junit5Selenium是一组支持浏览器自动化的工具和库&#xff0c;主要用于Web应用程序测试。 Selenium的组件之一是Selenium WebDriver&#xff0c;它提供客户端库&#xff0c;JSON有线协议&#xff08;与浏览器驱动程序进行通信的协议&#xff09;和浏览器驱动程序。 Se…

形容计算机网络教室的成语,形容教育的成语

形容教育的成语形容教育的成语【不教而杀】 【弦歌之声】 【化及冥顽】 【蒙以养正】【不言之教】 【沂水春风】 【嘉言善状】 【神道设教】【不教之教】 【相夫教子】 【画荻教子】 【磨昏抉聩】【东风化雨】 【因材施教】 【教无常师】 【脱骨换胎】…

Class的 getSuperclass与getGenericSuperclass区别

Class的getInterfaces与getGenericInterface区别 http://www.cnblogs.com/maokun/p/6773076.html一、getSuperclass 返回直接继承的父类&#xff08;由于编译擦除&#xff0c;没有显示泛型参数&#xff09; Class<? super T>getSuperclass() 返回表示此 Cla…

XML——XSLT的一个简单荔枝

【0】intro to XSLT&#xff08;转自&#xff1a;http://www.w3school.com.cn/xsl/xsl_languages.asp&#xff09;0.1&#xff09;起始于 XSL XSL 指扩展样式表语言&#xff08;EXtensible Stylesheet Language&#xff09;。 万维网联盟 (W3C) 开始发展 XSL 的原因是&#xff…

Eclipse系列的隐藏宝藏– 2019年版

Eclipse Collections是一个开放源代码Java Collections框架。 在此博客中&#xff0c;我将演示该框架的五个鲜为人知的功能。 我在去年的Java Advent Calendar中发布了一个类似的博客 。 请参阅博客末尾的资源以获取有关该框架的更多信息。 1. countBy() &#xff1a;当您要查…

css html 方格,使用CSS创建方格背景

这里是一个什么样的格仔背景看起来在图形设计编辑器&#xff0c;如Photoshop或Illustrator的翻版。 (所有的CSS).checkered{height: 240px;background: -webkit-linear-gradient(45deg, rgba(0, 0, 0, 0.0980392) 25%, transparent 25%, transparent 75%, rgba(0, 0, 0, 0.0980…

java嵌套类与内部类

一、嵌套类(Nested Classes) 使用嵌套类减少了命名冲突&#xff0c;一个内部类可以定义在一个类中&#xff0c;一个方法中甚至一个表达式中。 (1)定义 A nested(嵌套) class is any class whose declaration occurs within the body of another class or interface. A top lev…

jsr303 spring_使用Spring和JSR 303进行方法参数验证

jsr303 springSpring提供了一种使用JSR 303 bean验证来验证方法参数的简便方法。 在这篇文章中&#xff0c;我们将看到如何使用此功能。 建立 首先&#xff0c;我们需要通过创建MethodValidationPostProcessor bean添加对方法参数验证的支持&#xff1a; Configuration publi…

优先队列——斐波那契堆(without source code)

【0】README 0.1&#xff09; 本文部分内容转自 数据结构与算法分析&#xff0c;旨在理解 斐波那契堆 的基础知识&#xff1b; 0.2&#xff09; 文本旨在理清 斐波那契堆的 核心idea&#xff0c;还没有写出源代码实现&#xff0c;表遗憾&#xff1b; 0.3&#xff09;从实际角…

计算机专业考研可关注哪些公众号,考研应关注哪些公众号?

考研应关注哪些公众号&#xff1f;2018-11-30深夜睡不着&#xff0c;看到了这个问题&#xff0c;觉得我能帮上忙&#xff0c;就坐起来写了一份回答(^_^)微信公众号有&#xff1a;考研狗之家(特别推荐&#xff0c;各种资源)考研军火库(特别推荐&#xff0c;各种技巧)考研圈考研资…

cassandra 备份_使用sstableloader恢复Cassandra Priam备份

cassandra 备份我之前曾写过关于设置Cassandra和Priam进行备份和集群管理的文章。 但是&#xff0c;我在此处提供的用于备份还原的示例并不适用于所有情况&#xff0c;例如&#xff0c;它可能不适用于完全独立的群集。 或者在部分还原到一个表而不是整个数据库的情况下。 在这…

XML——XML概述

【0】README 0.1&#xff09;本文描述 转自 core java volume 2&#xff0c; 旨在理解 XML——XML概述 的基础知识&#xff1b; 【1】XML概述相关 1&#xff09;problemsolution &#xff08;干货——引入XML的原因&#xff09; 1.1&#xff09;problem&#xff1a;1.1.1&am…

java入门配置

一、下载安装JDK JDK下载路径&#xff1a;http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 点击 Accept License Agreement &#xff0c;选择自己的系统类型JDK下载&#xff0c;然后安装JDK。 二、安装JDK 双击JDK运行&#xff0c;选择…

华中科技大学计算机学院发表论文规定,华中科技大学等7所大学取消“研究生毕业必须发表论文”要求...

华中科技大学等7所大学取消“研究生毕业必须发表论文”要求北京晨报发表于 2006/07/17 10:51中国7所大学取消“研究生毕业必须发表论文”要求中新网7月16日电据《北京晨报》报道&#xff0c;昨天&#xff0c;记者从大学校长论坛了解到&#xff0c;中国人民大学、北京师范大学、…

计算机网络中的广播啥意思,开启无线广播啥意思

大家好&#xff0c;我是时间财富网智能客服时间君&#xff0c;上述问题将由我为大家进行解答。以路由器为例&#xff0c;开启无线广播是指开启无线路由器功能。路由器(Router&#xff0c;又称路径器)是一种计算机网络设备&#xff0c;它能将数据包通过一个个网络传送至目的地(选…

jep290涉及jdk版本_JDK 14 – JEP 361从预览中切换表达式

jep290涉及jdk版本在我的前一篇文章中 &#xff0c;我写了有关作为JDK 12的预览功能发布的开关表达式和相关增强功能的信息。随后&#xff0c;在JDK 13中提出了一些更改&#xff0c;例如使用yield关键字从switch块返回值并在预览中发布。 在即将于明年3月在GA上市的即将发布的…

java变量作用域Scope

一、变量Scope 作用域同时决定了它的“可见性”以及“存在时间”。在C&#xff0c;C和Java里&#xff0c;作用域是由花括号的位置决定的。变量的作用域分为四个级别&#xff1a;类级、对象实例级、方法级、块级。 二、类级Scope 类级变量又称全局级变量或静态变量&#xff0c…

XML——解析XML文档

【0】README 0.1&#xff09;本文描述 转自 core java volume 2&#xff0c; 旨在理解 XML——解析XML文档 的基础知识&#xff1b; 0.2&#xff09; for source code, please visit https://github.com/pacosonTang/core-java-volume/blob/master/coreJavaAdvanced/chapter2…

计算机维修与维护入门,计算机组装与维护基础知识

《计算机组装与维护基础知识》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《计算机组装与维护基础知识(5页珍藏版)》请在人人文库网上搜索。1、计算机组装与维护基础知识关键考点&#xff1a;CPU主板内存硬盘显卡CMOS硬件组装操作系统学生姓名&#xff1a;总分&…

java oauth2.0_OAuth 2.0 Java指南:5分钟保护您的应用程序安全

java oauth2.0使用Okta的身份管理平台轻松部署您的应用程序 使用Okta的API在几分钟之内即可对任何应用程序中的用户进行身份验证&#xff0c;管理和保护。 今天尝试Okta。 现代应用程序依赖于用户身份验证&#xff0c;但是它可能给Java开发人员带来困难的挑战&#xff0c;以及…