当前位置:网站首页>Person.class.getInterfaces() 注意使用方法
Person.class.getInterfaces() 注意使用方法
2022-08-04 09:35:00 【魔道不误砍柴功】
Person.class.getInterfaces() 注意使用方法
如果此对象表示一个接口,则该数组包含表示该接口扩展的所有接口的对象。数组中接口对象顺序与此对象所表示的接口的声明的
extends
子句中接口名顺序一致。如果此对象表示一个不实现任何接口的类或接口,则此方法返回一个长度为 0 的数组。
如果此对象表示一个基本类型或
void
,则此方法返回一个长度为 0 的数组。
代码演示
package main.tcp.dubbo.test;
interface Person{
}
class Son implements Person{
}
public class TestDemo {
public static void main(String[] args) {
// 如果此对象表示一个不实现任何接口的类或接口,则此方法返回一个长度为 0 的数组。
System.out.println(Person.class.getInterfaces().length); // 输出结果是:0
System.out.println(Son.class.getInterfaces()[0]); // 输出结果是:interface main.tcp.dubbo.test.Person
ReflectInterface target = new ReflectInterfaceImpl();
System.out.println(target.getClass().getInterfaces()[0]);// 输出结果是:interface main.tcp.dubbo.test.ReflectInterface
System.out.println(new Class[]{
ReflectInterface.class}[0]);// 输出结果是:interface main.tcp.dubbo.test.ReflectInterface
System.out.println(ReflectInterface.class.getInterfaces().length); // 输出结果是:0
System.out.println(target.getClass());// 输出结果是:class main.tcp.dubbo.test.ReflectInterfaceImpl
System.out.println(ReflectInterface.class); // 输出结果是: interface main.tcp.dubbo.test.ReflectInterface
// 反射中第二个参数需要传入被代理类的接口数组,那么就有这几种写法了,如下:
// ReflectInterfaceImpl.class.getInterfaces()
// new Class<?>[]{ReflectInterface.class} // 推荐使用这种,灵活易用
// target.getClass().getInterfaces()
ReflectInterface service = (ReflectInterface)Proxy
.newProxyInstance(ReflectInterface.class.getClassLoader()
,new Class[]{
ReflectInterface.class}
,(obj, method, params) -> {
System.out.println("param="+ Arrays.asList(params));
String response = (String)method.invoke(target, params);
return response;
});
System.out.println(service.hello("我是入参"));
}
}
class ReflectInterfaceImpl implements ReflectInterface{
@Override
public String hello(String param) {
System.out.println("=================param="+param);
return "放屁";
}
}
运行结果:
0
interface main.tcp.dubbo.test.Person
interface main.tcp.dubbo.test.ReflectInterface
interface main.tcp.dubbo.test.ReflectInterface
0
class main.tcp.dubbo.test.ReflectInterfaceImpl
interface main.tcp.dubbo.test.ReflectInterface
param=[我是入参]
=================param=我是入参
放屁
Process finished with exit code 0
总结一句话,该类是否有父类接口,有的话就会有返回,否则数组长度为0,相当于没有元素返回。
边栏推荐
猜你喜欢
有了这篇 Kubernetes 的介绍,它的原理秒懂!
[Punctuality Atom STM32 Serial] Chapter 3 Development Environment Construction Excerpted from [Punctual Atom] MiniPro STM32H750 Development Guide_V1.1
《福格行为模型》:如何养成好习惯?
2022 Cloud Native Computing代表厂商 | 灵雀云第三次入选Gartner中国ICT技术成熟度曲线报告
双指针方法
参数优化。
Post-94 Byte P7 posted the salary slip: It's really good to make up for this...
Producer and Consumer Problems in Concurrent Programming
使用ClickHouse分析COS的清单和访问日志
我和 TiDB 的故事 | TiDB 对我不离不弃,我亦如此
随机推荐
菲沃泰科创板上市:市值123亿 宗坚赵静艳夫妇身价76亿
陈春花发布声明,这场流量狂欢该到了收尾的时候
MindSpore:【model_zoo】【resnet】尝试用THOR优化器运行时报cannot import name ‘THOR‘
《福格行为模型》:如何养成好习惯?
学习在php中分析switch与ifelse的执行效率
MATLAB/Simulink快捷键
MindSpore:MindSpore GPU版本安装问题
After four years of outsourcing, the autumn recruits finally landed
罗克韦尔AB PLC RSLogix5000中定时器指令使用方法介绍
请问同一个oracle cdc表,如果flink job重新提交,是会全量读取一遍源数据还是增量呢?
Apache APISIX 2.15 版本发布,为插件增加更多灵活性
如何快速将Zabbix5.0升级至6.0?
TiFlash 源码阅读(五) DeltaTree 存储引擎设计及实现分析 - Part 2
Win11怎么进行左右键对调?
leetcode动态规划系列(求路径篇)
我和 TiDB 的故事 | 缘份在,那就终是能相遇的
cannot import name 'import_string' from 'werkzeug' [bug solution]
telnet远程登录aaa模式详解【华为eNSP】
Post-94 Byte P7 posted the salary slip: It's really good to make up for this...
【云驻共创】HCSD 大咖直播–就业指南