举例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. struts2从浅至深(五)上传与下载

    1.编写上传页面 2.编写动作方法 import java.io.File;import java.io.IOException; import javax.servlet.ServletContex ...

  2. OpenGL ES之GLFW窗口搭建

    概述 本章节主要总结如何使用GLFW来创建Opengl窗口.主要包括如下内容: OpenGl窗口创建介绍 GLFW Window版编译介绍 GLFW简单工程源码介绍 OpenGL窗口创建介绍 能用于O ...

  3. vc创建模态和非模态对话框

    模态对话框的创建 创建模态对话框需要调用CDialog类的成员函数:DoModal,该函数的功能就是创建并显示一个模 态对话框,关闭模态对话框的函数是EndDialog,该函数需要一个参数,这个参数就 ...

  4. Log4Net从Mvc转到.Net Core

    原项目用的Log4Net,不过版本比较旧,在Core里新版也进行了支持,本文用的是现在最新版本2.0.8 1.LogHelper帮助类放另一个类库中 Log/LogHelper.cs 2.单独建的配置 ...

  5. 【C#进阶】委托那些事儿(二)

    二.传统的委托 接下来讲一讲方法参数.下面以“餐馆服务员为客户下单”[2]的事件作为描述.一般对事件的做法分3个部分: 1. 方法参数 EventArgs,一般用于传送数据.在本例场景中 public ...

  6. 超简单工具puer——“低碳”的前后端分离开发

    本文由作者郑海波授权网易云社区发布. 前几天,跟一同事(MIHTool作者)讨教了一下开发调试工具.其实个人觉得相较于定制一个类似MIHTool的Hybrid App容器,基于长连的B/S架构的工具其 ...

  7. Day 35 验证客户端的合法性+socketserver

    一 .getpeername和getsoketopt的用法 服务器端代码 import socket sk =socket.socket() sk.bind(('127.0.0.1',9000)) s ...

  8. Python 将一个时间戳格式化为(格林威治时间或者本地时区时间)

    时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数. 获取一个时间戳 import time times = time. ...

  9. iterm2 恢复默认设置

    如果你设置了Iterm2的默认字体,然后感觉不好看又忘记默认字体是什么的时候 执行如下命令,重新启动iTerm2即可: defaults delete com.googlecode.iterm2

  10. js代码上的优化

    例1  if ( config.url === '/web/teacher/classes'  || config.url === '/web/teacher/students || config.u ...