当前位置: 首页 > news >正文

北京市规划网站免费b站推广网站详情

北京市规划网站,免费b站推广网站详情,163免费注册入口,0基础学做网站教程2019独角兽企业重金招聘Python工程师标准>>> 今天在做解析网络请求后得到的数据的转化的时候用到了getGenericInterfaces这个方法,顺便也了解了下和他长得差不多的getInterfaces方法。 官方文档解释 getGenericInterfaces: Returns the {code Type}s rep…

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

今天在做解析网络请求后得到的数据的转化的时候用到了getGenericInterfaces这个方法,顺便也了解了下和他长得差不多的getInterfaces方法。

官方文档解释

getGenericInterfaces:

Returns the {@code Type}s representing the interfaces directly implemented by the class or interface represented by this object.释意:返回表示由此对象表示的类或接口直接实现的接口的{@code Type}。

getInterfaces:

Determines the interfaces implemented by the class or interface represented by this object. 释意:返回由此对象表示的类或接口实现的接口。

从解释上面来看出来了,差异在于“接口实现的接口的Type”,接下来用具体示例来解释区别

private class Food{String foodName;
}
private interface Eat{void eat(String things);
}
private interface Run{void run();
}
private class Dog implements Eat,Run{[@Override](https://my.oschina.net/u/1162528)public void run() { }[@Override](https://my.oschina.net/u/1162528)public void eat(String things) { }
}
private void main() {Class<?> clazz = Dog.class;Type[] genericInterfaces = clazz.getGenericInterfaces();Class<?>[] interfaces = clazz.getInterfaces();
}

运行结果:

我们可以看到,clazz.getGenericInterfaces()与clazz.getInterfaces()并没有任何差异。因为 并没有:“实现的接口的Type”

接下来看另一段代码,我们对Eat接口改造一下,增加参数化类型

private class Food{String foodName;
}
private interface Eat<T>{void eat(T things);
}
private interface Run{void run();
}private class Dog implements Eat<Food>,Run{[@Override](https://my.oschina.net/u/1162528)public void run() { }@Overridepublic void eat(Food things) { }
}
private void main() {Class<?> clazz = Dog.class;Type[] genericInterfaces = clazz.getGenericInterfaces();Class<?>[] interfaces = clazz.getInterfaces();
}

运行结果:

可以看到:clazz.getGenericInterfaces();所生成的数组里有一个接口类型为:ParameterizedType 而ParameterizedType extends Type 而ParameterizedType 和 Type 有什么区别呢?

Type代表 包括原始类型,参数化类型、数组类型、类型变量和原始类型,而ParameterizedType只代表参数化类型 官方文档:

ParameterizedType represents a parameterized type such as Collection<String>

译:ParameterizedType表示参数化类型,例如 Collection<String> ParameterizedType相对于Type新增了三个接口方法:

  • Type[] getActualTypeArguments(); //返回参数化类型的实际类型的数组 例如:Food<Fruit,Vegetable>那么将返回 [Fruit,Vegetable]这两个类型的数组 下面两种方法就不用多说了,从字面意思就能看出来。

  • Type getRawType();

  • Type getOwnerType();

回到上面,在看getGenericInterfaces()的内部实之前现,我们先看看getInterfaces()的内部实现

public Class<?>[] getInterfaces() {if (isArray()) {return new Class<?>[] { Cloneable.class, Serializable.class };}final Class<?>[] ifaces = getInterfacesInternal();if (ifaces == null) {return EmptyArray.CLASS;}return ifaces;
}
@FastNative
private native Class<?>[] getInterfacesInternal();

可以看到,getInterfaces源码逻辑比较简单先判断传入的是不是一个class 数组,我们这里先对单个class进行讨论,暂且不管,后面使用了native方法getInterfacesInternal

再看getGenericInterfaces()的内部实现

  public Type[] getGenericInterfaces() {Type[] result;synchronized (Caches.genericInterfaces) {result = Caches.genericInterfaces.get(this);if (result == null) {String annotationSignature = getSignatureAttribute();if (annotationSignature == null) {result = getInterfaces();} else {GenericSignatureParser parser = new GenericSignatureParser(getClassLoader());parser.parseForClass(this, annotationSignature);result = Types.getTypeArray(parser.interfaceTypes, false);}Caches.genericInterfaces.put(this, result);}}return (result.length == 0) ? result : result.clone();
}`

内部实现完全和getInterfaces()不太一样 逻辑是:

1、从缓存中取genericInterfaces

2、没有再利用 getSignatureAttribute(),先不管getSignatureAttribute具体做了什么,从字面意思上看是获取了相关属性

3、getSignatureAttribute值为null则执行 getInterfaces,否则继续获取 4、缓存数据

其实这里我们已经能明白getInterfaces和getGenericInterfaces的差异性了,主要在getSignatureAttribute()这里,接下来继续对getSignatureAttribute()进行分析

getSignatureAttribute()的内部实现为:

private String getSignatureAttribute() {String[] annotation = getSignatureAnnotation();if (annotation == null) {return null;}StringBuilder result = new StringBuilder();for (String s : annotation) {result.append(s);}return result.toString();
}

最主要看getSignatureAnnotation(),这又是一个native方法,这个之后再进行详细讲解。

对上面的内容进行一个总结:

getInterfaces:主要是 获取由此对象表示的类或接口实现的接口

getGenericInterfaces: 主要是 获取由此对象表示的类或接口直接实现的接口的Type。

区别在于getGenericInterfaces可以返回其参数化类型,例如: Collection<String>、 List<Coupon>中的String和Coupon

小的才疏学浅,难免有些地方会有错误,欢迎指正。

转载于:https://my.oschina.net/617669559/blog/3012228

http://www.lbrq.cn/news/2557117.html

相关文章:

  • 山东网站营销推广费用百度推广没有一点效果
  • 太原站还建综合楼2024年新冠疫情最新消息
  • 织梦cms做视频网站全网品牌推广公司
  • 洛阳网站设计哪家专业夫唯seo视频教程
  • 微信微网站建设平台网站可以自己做吗
  • 备案 网站软文范例大全200字
  • 青岛网站制作企业拼多多关键词优化步骤
  • 网站安全制度体系的建设情况成人职业培训机构
  • 建设外卖网站规划书百度地图导航网页版
  • 网站第三方评价如何做合肥百度快照优化排名
  • 做网站的软件帝国成人短期培训学校
  • 网站建设分类百度seo排名优化公司推荐
  • 服务器做网站宁德市人社局官网
  • 中核二二公司真实情况潍坊关键词优化平台
  • 企业网站建设需要许可证吗设计师网站
  • 重庆网站建站建设免费滨州网站seo
  • 韶关网站建设价格社会新闻最新消息
  • 不用服务器做视频网站吗seo外包服务专家
  • 网站域名在哪里看怎么做一个属于自己的网站
  • flash网站做seo优化好不好aso优化重要吗
  • 学校建设网站目标google国外入口
  • 誉重网站建设公司seo外包方案
  • vps被攻击网站打不开ping值高灰色广告投放平台
  • 北京网站制作南昌长春最专业的seo公司
  • 网页设计一个多少工资移动端关键词排名优化
  • 网站建设 软件开发2021最近最火的关键词
  • 重庆网站制作开发南通做网站推广的公司
  • 广告行业做网站哪个好游戏推广员好做吗
  • 自助建设网站软件网页制作软件下载
  • 网站制作公司 顺的saas建站
  • 国产开源大模型崛起:使用Kimi K2/Qwen2/GLM-4.5搭建编程助手
  • 【Django】-2- 处理HTTP请求
  • 走进computed,了解computed的前世今生
  • 基于单片机胎压检测/锅炉蒸汽压力/气压检测系统
  • 企业微信API接口发消息实战:从0到1的技术突破之旅
  • 02 基于sklearn的机械学习-KNN算法、模型选择与调优(交叉验证、朴素贝叶斯算法、拉普拉斯平滑)、决策树(信息增益、基尼指数)、随机森林