举例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的更多相关文章

  1. 转:微信开发之使用java获取签名signature(贴源码,附工程)

    微信开发之使用java获取签名signature(贴源码,附工程) 标签: 微信signature获取签名 2015-12-29 22:15 6954人阅读 评论(3) 收藏 举报  分类: 微信开发 ...

  2. 微信开发之使用java获取签名signature(贴源码,附工程)

    一.前言 微信接口调用验证最终需要用到的三个参数noncestr.timestamp.signature: 接下来将会给出获取这三个参数的详细代码 本文的环境eclipse + maven 本文使用到 ...

  3. java接口签名(Signature)实现方案续

    一.前言 由于之前写过的一片文章 (java接口签名(Signature)实现方案 )收获了很多好评,此次来说一下另一种简单粗暴的签名方案.相对于之前的签名方案,对body.paramenter.pa ...

  4. java接口签名(Signature)实现方案

    预祝大家国庆节快乐,赶快迎接美丽而快乐的假期吧!!! 一.前言 在为第三方系统提供接口的时候,肯定要考虑接口数据的安全问题,比如数据是否被篡改,数据是否已经过时,数据是否可以重复提交等问题.其中我认为 ...

  5. 微信js获得签名signature

    服务器端: 1 获取微信js accessToken 备注:access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token. 开发者需要进行妥善保存.access_ ...

  6. Token以及签名signature的设计与实现

    LZ第一次给app写开放接口,把自己处理Token的实现记录下来,目的是如果以后遇到好的实现,能在此基础上改进.这一版写法非常粗糙,写出来就是让大家批评的,多多指教,感谢大家. 当初设计这块想达到的效 ...

  7. 微信JS-SDK签名signature错误代码4029

    一般是url的错,url需要动态获取 c#的写法: //Request.Url.ToString()这个获取的是没有端口号的有些网站有端口号 string url = Request.Url.Orig ...

  8. Python下RSA加密/解密, 签名/验证

    原文是py2环境,而我的环境是py3,所以对原代码做了修改:decode(), encode() import rsa # 生成密钥 (pubkey, privkey) = rsa.newkeys(1 ...

  9. python下RSA 加密/解密,签名/验证

    基于win7 + python3.4 原文是py2环境,而我的环境是py3,所以对原代码做了修改:decode(), encode() import rsa # 生成密钥 (pubkey, privk ...

随机推荐

  1. HTML中submit和button的区别

    submit是button的一个特例,也是button的一种,它把提交这个动作自动集成了. 如果表单在点击提交按钮后需要用JS进行处理(包括输入验证)后再提交的话,通常都必须把submit改成butt ...

  2. 使用Octopress博客 搭建博客

    Octopress介绍 Octopress是一款优秀的静态化博客系统,也是一个本地化的博客系统,之前部落在介绍免费开源Github Pages空间时有提到过Octopress,Github为我们提供长 ...

  3. [label][翻译][JavaScript]如何使用JavaScript操纵radio和check boxes

    Radio 和 check boxes是form表单中的一部分,允许用户通过鼠标简单点击就可以选择.当与<textarea>元素的一般JavaScript操纵相比较,这些表单控件(form ...

  4. 动态载入DLL所需要的三个函数详解(LoadLibrary,GetProcAddress,FreeLibrary)

    动态载入 DLL 动态载入方式是指在编译之前并不知道将会调用哪些 DLL 函数, 完全是在运行过程中根据需要决定应调用哪些函数. 方法是:用 LoadLibrary 函数加载动态链接库到内存,用 Ge ...

  5. 【WinRT】让控件飞,WinRT 中实现 web 中的 dragable 效果

    由于在 xaml 体系中,控件没有传统 WebForm 中的 Left.Top.Right.Bottom 这些属性,取而代之的是按比例(像 Grid)等等的响应布局.但是,传统的这些设置 Left.T ...

  6. Elasticsearch 的一些关键概念

    我更喜欢把 Elasticsearch 作为一种 nosql 去理解,它的一些开发概念和 MongoDB 以及 Redis 没有太大的区别,不过了解 Elasticsearch 中的一些核心概念对于你 ...

  7. java多线程 —— 两种实际应用场景模拟

    最近做的偏向并发了,因为以后消息会众多,所以,jms等多个线程操作数据的时候,对共享变量,这些要很注意,以防止发生线程不安全的情况. (一) 先说说第一个,模拟对信息的发送和接收.场景是这样的: 就像 ...

  8. 微软研发流程(ALM)管理培训会议(比亚迪汽车)

    主要讨论和演示整体研发流程,包括需求管理.项目计划.开发管理.生成和发布.测试管理等. Figure 1 - 客户现场培训 Figure 2 - 客户现场培训 Figure 3 - 客户现场培训

  9. Alwayson--使用证书创建高可用性组

    --场景: --有服务器SQLNode11,SQLNODE21,SQLNODE31三台在同一故障转移群集SQLNode01中 --的数据库服务器,安装SQL SERVER 2012 并配置启动alwa ...

  10. Asp.net Core 2.1 Kestrel 现在支持 多协议处理(Tcp)

    地址:https://github.com/davidfowl/MultiProtocolAspNetCore.git 在一个Kestrel服务上可以同时处理Tcp,Http,Https等多种协议. ...