关于class的签名Signature
举例1:
public class Test05<A, B extends java.util.List<String>, C extends InputStream&Serializable> { public <AA extends A,BB extends B,CC extends BB> void test1( AA a, List<BB> b, List<? extends CC> c ){ } public void test(){ List<? extends Number> a = new ArrayList<Integer>(); List<? super Integer> b = new ArrayList<Number>(); List<?> c = new ArrayList<String>(); } }
类的签名如下:
< A:Ljava/lang/Object; B::Ljava/util/List<Ljava/lang/String;>; C:Ljava/io/InputStream;:Ljava/io/Serializable; > Ljava/lang/Object;
其中的Ljava/lang/Object;表示这个类的父类。而B extends java.util.List<String>被描述为B::Ljava/util/List<Ljva/lang/String;>;因为List是接口类型,而ClassBound为空就会出现这样的情况。
方法的签名如下:
<AA:TA;BB:TB;CC:TBB;> (TAA;Ljava/util/List<TBB;>;Ljava/util/List<+TCC;>;) V
举例2:
class pc<T>{} interface ifc1<T>{} interface ifc2<T>{} public class Test05<T> extends pc<List<? extends String>> implements ifc1<String>,ifc2<List<? extends Number>> { List<? extends Number> a = new ArrayList<Integer>(); List<? super Integer> b = new ArrayList<Number>(); List<?> c = new ArrayList<String>(); }
类的签名如下:
<T:Ljava/lang/Object;> Lcom/test19/pc<Ljava/util/List<+Ljava/lang/String;>;>; Lcom/test19/ifc1<Ljava/lang/String;>; Lcom/test19/ifc2<Ljava/util/List<+Ljava/lang/Number;>;>;
三个字段的签名如下:
Ljava/util/List<+Ljava/lang/Number;>; Ljava/util/List<-Ljava/lang/Integer;>; Ljava/util/List<*>;
class TestClassSig<T> extends Parent<Integer>{ class BB<B extends T>{ } }
则字段签名为:
com.test19.TestClassSig$BB(com.test19.TestClassSig); descriptor: (Lcom/test19/TestClassSig;)V flags: Code: stack=2, locals=2, args_size=2 0: aload_0 1: aload_1 2: putfield #10 // Field this$0:Lcom/test19/TestClassSig; 5: aload_0 6: invokespecial #12 // Method java/lang/Object."<init>":()V 9: return LineNumberTable: line 19: 0 LocalVariableTable: Start Length Slot Name Signature 0 10 0 this Lcom/test19/TestClassSig$BB; LocalVariableTypeTable: Start Length Slot Name Signature 0 10 0 this Lcom/test19/TestClassSig<TT;>.BB<TB;>;
可以看到LocalVariableTypeTable的Signature的签名为:Lcom/test19/TestClassSig<TT;>.BB<TB;>;
关于class的签名Signature的更多相关文章
- 转:微信开发之使用java获取签名signature(贴源码,附工程)
微信开发之使用java获取签名signature(贴源码,附工程) 标签: 微信signature获取签名 2015-12-29 22:15 6954人阅读 评论(3) 收藏 举报 分类: 微信开发 ...
- 微信开发之使用java获取签名signature(贴源码,附工程)
一.前言 微信接口调用验证最终需要用到的三个参数noncestr.timestamp.signature: 接下来将会给出获取这三个参数的详细代码 本文的环境eclipse + maven 本文使用到 ...
- java接口签名(Signature)实现方案续
一.前言 由于之前写过的一片文章 (java接口签名(Signature)实现方案 )收获了很多好评,此次来说一下另一种简单粗暴的签名方案.相对于之前的签名方案,对body.paramenter.pa ...
- java接口签名(Signature)实现方案
预祝大家国庆节快乐,赶快迎接美丽而快乐的假期吧!!! 一.前言 在为第三方系统提供接口的时候,肯定要考虑接口数据的安全问题,比如数据是否被篡改,数据是否已经过时,数据是否可以重复提交等问题.其中我认为 ...
- 微信js获得签名signature
服务器端: 1 获取微信js accessToken 备注:access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token. 开发者需要进行妥善保存.access_ ...
- Token以及签名signature的设计与实现
LZ第一次给app写开放接口,把自己处理Token的实现记录下来,目的是如果以后遇到好的实现,能在此基础上改进.这一版写法非常粗糙,写出来就是让大家批评的,多多指教,感谢大家. 当初设计这块想达到的效 ...
- 微信JS-SDK签名signature错误代码4029
一般是url的错,url需要动态获取 c#的写法: //Request.Url.ToString()这个获取的是没有端口号的有些网站有端口号 string url = Request.Url.Orig ...
- Python下RSA加密/解密, 签名/验证
原文是py2环境,而我的环境是py3,所以对原代码做了修改:decode(), encode() import rsa # 生成密钥 (pubkey, privkey) = rsa.newkeys(1 ...
- python下RSA 加密/解密,签名/验证
基于win7 + python3.4 原文是py2环境,而我的环境是py3,所以对原代码做了修改:decode(), encode() import rsa # 生成密钥 (pubkey, privk ...
随机推荐
- 功能强大的文件上传插件带上传进度-WebUploader
WebUploader是由Baidu WebFE(FEX)团队开发的一个以HTML5/FLASH构建的现代文件上传组件.在现代的浏览器里面能充分发挥HTML5的优势,同时又不摒弃主流IE浏览器,沿用老 ...
- SpringMvc中controller之间的方法调用
方法一, return new ModelAndView("redirect:"+新地址); 方法二, response.sendRedirect(新地址); return nul ...
- POJ3273 Monthly Expense 2017-05-11 18:02 30人阅读 评论(0) 收藏
Monthly Expense Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 25959 Accepted: 10021 ...
- 同一台服务器配置多个tomcat服务的方法
要在同一台服务器上配置多个tomcat服务,需要解决以下几个问题 (1) 不同的tomcat启动和关闭监听不同的端口 (2) 不同的tomcat的启动文件startup.sh 中要指定各自的CATAL ...
- LINUX中关于SIGNAL的定义
/* Signals. */ #define SIGHUP 1 /* Hangup (POSIX). */ #define SIGINT 2 /* Interrupt (ANSI). */ #defi ...
- Java何时该使用覆盖?
在Java编程中,什么时候该使用覆盖函数操作呢,很多人都知道有覆盖操作,但是到底什么时候该使用覆盖操作,还是有一些模糊的感觉,以下就举例来用代码分析就明白了, 举例生活中的案例,模拟制造手机的公司: ...
- ADO.NET操作PostgreSQL:数据库操作类(已封装)
1.增.删.改通用方法 /// <summary> /// 增.删.改通用方法 /// </summary> /// <param name="commandT ...
- 673. Number of Longest Increasing Subsequence
Given an unsorted array of integers, find the number of longest increasing subsequence. Example 1: I ...
- HTTP/1.0中,状态码200 301 304 403 404 500的含义?
200 OK 服务器成功处理了请求 301 重定向,请求的URL已移走 304未修改,客户的缓存资源是最新的,要客户端使用缓存 403禁止,请求被服务器拒绝了 404未找到资源 500内部服务器错误, ...
- FunDA(6)- Reactive Streams:Play with Iteratees、Enumerator and Enumeratees
在上一节我们介绍了Iteratee.它的功能是消耗从一些数据源推送过来的数据元素,不同的数据消耗方式代表了不同功能的Iteratee.所谓的数据源就是我们这节要讨论的Enumerator.Enumer ...