1、Signature属性:https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.7.9

2、ClassSignature、FieldTypeSignature、MethodTypeSignature说明:

https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.3.2-200

3、JLS:https://docs.oracle.com/javase/specs/index.html

举个例子,如下:

interface IA{}
interface IB{}

class CA{}

class TP extends CA implements IA,IB{}

class ParentClass<T>{}

interface ParentIA{}
interface ParentIB{}

// 出现在ClassFile的attributes属性中的Signature属性
// <T:Lcom/test18/CA;:Lcom/test18/IA;:Lcom/test18/IB;E:TT;>
// Lcom/test18/ParentClass<Ljava/lang/String;>;
// Lcom/test18/ParentIA;Lcom/test18/ParentIB;
public class TestClass<T extends CA&IA&IB,E extends T>
        extends ParentClass<String>
        implements ParentIA,ParentIB{

	// 出现在methods属性的attributes的Signature属性
	// <A:Lcom/test18/CA;:Lcom/test18/IA;:Lcom/test18/IB;B:TA;>
	// (TA;Ljava/util/List<+TB;>;)
	// V
    public <A extends CA&IA&IB,B extends A> void mymethod(A a,List<? extends B> list){

    	// 仅出现在常量池中,为什么?
    	// Ljava/util/List<Ljava/io/InputStream;>;
    	List<InputStream>  x = null;
    	// Ljava/util/List<-Ljava/io/InputStream;>;
    	List<? super InputStream> y = null;
    }
}

通过javap -verbose TestClass查看Class文件的结构:

Classfile /C:/TestClass.class
  Last modified 2018-7-5; size 1058 bytes
  MD5 checksum d9dc89733c2ea9a57bbced4b4c20f998
  Compiled from "TestClass.java"
public class com.test18.TestClass<T extends com.test18.CA & com.test18.IA & com.test18.IB, E extends T> extends com.test18.ParentClass<java.lang.String> implements com.test18.ParentIA, com.test18.ParentIB
  Signature: #29                          // <T:Lcom/test18/CA;:Lcom/test18/IA;:Lcom/test18/IB;E:TT;>Lcom/test18/ParentClass<Ljava/lang/String;>;Lcom/test18/ParentIA;Lcom/test18/ParentIB;
  SourceFile: "TestClass.java"
  minor version: 0
  major version: 51
  flags: ACC_PUBLIC, ACC_SUPER
Constant pool:
   #1 = Methodref          #3.#32         //  com/test18/ParentClass."<init>":()V
   #2 = Class              #33            //  com/test18/TestClass
   #3 = Class              #34            //  com/test18/ParentClass
   #4 = Class              #35            //  com/test18/ParentIA
   #5 = Class              #36            //  com/test18/ParentIB
   #6 = Utf8               <init>
   #7 = Utf8               ()V
   #8 = Utf8               Code
   #9 = Utf8               LineNumberTable
  #10 = Utf8               LocalVariableTable
  #11 = Utf8               this
  #12 = Utf8               Lcom/test18/TestClass;
  #13 = Utf8               LocalVariableTypeTable
  #14 = Utf8               Lcom/test18/TestClass<TT;TE;>;
  #15 = Utf8               mymethod
  #16 = Utf8               (Lcom/test18/CA;Ljava/util/List;)V
  #17 = Utf8               a
  #18 = Utf8               Lcom/test18/CA;
  #19 = Utf8               list
  #20 = Utf8               Ljava/util/List;
  #21 = Utf8               x
  #22 = Utf8               y
  #23 = Utf8               TA;
  #24 = Utf8               Ljava/util/List<+TB;>;
  #25 = Utf8               Ljava/util/List<Ljava/io/InputStream;>;
  #26 = Utf8               Ljava/util/List<-Ljava/io/InputStream;>;
  #27 = Utf8               Signature
  #28 = Utf8               <A:Lcom/test18/CA;:Lcom/test18/IA;:Lcom/test18/IB;B:TA;>(TA;Ljava/util/List<+TB;>;)V
  #29 = Utf8               <T:Lcom/test18/CA;:Lcom/test18/IA;:Lcom/test18/IB;E:TT;>Lcom/test18/ParentClass<Ljava/lang/String;>;Lcom/test18/ParentIA;Lcom/test18/ParentIB;
  #30 = Utf8               SourceFile
  #31 = Utf8               TestClass.java
  #32 = NameAndType        #6:#7          //  "<init>":()V
  #33 = Utf8               com/test18/TestClass
  #34 = Utf8               com/test18/ParentClass
  #35 = Utf8               com/test18/ParentIA
  #36 = Utf8               com/test18/ParentIB
{
  public com.test18.TestClass();
    flags: ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
         0: aload_0
         1: invokespecial #1                  // Method com/test18/ParentClass."<init>":()V
         4: return
      LineNumberTable:
        line 53: 0
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
               0       5     0  this   Lcom/test18/TestClass;
      LocalVariableTypeTable:
        Start  Length  Slot  Name   Signature
            0       5     0  this   Lcom/test18/TestClass<TT;TE;>;

  public <A extends com/test18/CA & com/test18/IA & com/test18/IB, B extends A> void mymethod(A, java.util.List<? extends B>);
    flags: ACC_PUBLIC
    Code:
      stack=1, locals=5, args_size=3
         0: aconst_null
         1: astore_3
         2: aconst_null
         3: astore        4
         5: return
      LineNumberTable:
        line 60: 0
        line 61: 2
        line 62: 5
      LocalVariableTable:
           Start  Length  Slot  Name   Signature
               0       6     0  this   Lcom/test18/TestClass;
               0       6     1     a   Lcom/test18/CA;
               0       6     2  list   Ljava/util/List;
               2       4     3     x   Ljava/util/List;
               5       1     4     y   Ljava/util/List;
      LocalVariableTypeTable:
        Start  Length  Slot  Name   Signature
            0       6     0  this   Lcom/test18/TestClass<TT;TE;>;
            0       6     1     a   TA;
            0       6     2  list   Ljava/util/List<+TB;>;
            2       4     3     x   Ljava/util/List<Ljava/io/InputStream;>;
            5       1     4     y   Ljava/util/List<-Ljava/io/InputStream;>;

    Signature: #28                          // <A:Lcom/test18/CA;:Lcom/test18/IA;:Lcom/test18/IB;B:TA;>(TA;Ljava/util/List<+TB;>;)V
}

  

关于Class中的Signature属性的更多相关文章

  1. 在实体对象中访问导航属性里的属性值出现异常“There is already an open DataReader associated with this Command which must be closed first”

    在实体对象中访问导航属性里的属性值出现异常“There is already an open DataReader associated with this Command which must be ...

  2. 借助JavaScript中的Dom属性改变Html中Table边框的颜色

    借助JavaScript中的Dom属性改变Html中Table边框的颜色 -------------------- <html> <head> <title>我是页 ...

  3. CSS 中关于background 属性功能

    background 是 css中的核心属性,我们对他应该充分了解. background-image   定义背景图像  这个属性是我们用的最多的属性 设置背景图像有两个方式 background: ...

  4. android中xml tools属性详解

    第一部分 安卓开发中,在写布局代码的时候,ide可以看到布局的预览效果. 但是有些效果则必须在运行之后才能看见,比如这种情况:TextView在xml中没有设置任何字符,而是在activity中设置了 ...

  5. echarts中显示效果option中必有的属性

    写一个最简单的效果让option中不可缺少的属性. var option = { xAxis:[ //x轴,数组对象,其下至少有一个对象 {.....} ], yAxis:[//y轴,数组对象,其下可 ...

  6. Vue - 在v-repeat中使用计算属性

    1.从后端获取JSON数据集合后,对单条数据应用计算属性,在Vue.js 0.12版本之前可以在v-repeat所在元素上使用v-component指令 在Vue.js 0.12版本之后使用自定义元素 ...

  7. DataGrid中的常用属性

    DataGrid中的常用属性 $('#dg').datagrid({ url:'datagrid_data.json', columns:[[ {field:'code',title:'Code',w ...

  8. meta标签中的http-equiv属性使用介绍(转载)

    meta是html语言head区的一个辅助性标签.也许你认为这些代码可有可无.其实如果你能够用好meta标签,会给你带来意想不到的效果,meta标签的作用有:搜索引擎优化(SEO),定义页面使用语言, ...

  9. Don’t Use Accessor Methods in Initializer Methods and dealloc 【初始化和dealloc方法中不要调用属性的存取方法,而要直接调用 _实例变量】

    1.问题:    在dealloc方法中使用[self.xxx release]和[xxx release]的区别? 用Xcode的Analyze分析我的Project,会列出一堆如下的提示:Inco ...

随机推荐

  1. javascript实现责任链设计模式

    javascript实现责任链设计模式 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系.将这些对象连成一条链,并沿这条链传递该请求,直到有一个对象处理他为止. 这是Gof的定义 ...

  2. Java多线程-并发协作(生产者消费者模型)

    对于多线程程序来说,不管任何编程语言,生产者和消费者模型都是最经典的.就像学习每一门编程语言一样,Hello World!都是最经典的例子. 实际上,准确说应该是“生产者-消费者-仓储”模型,离开了仓 ...

  3. c# richTextBox判断是否为图片文件

    //图片 if (richText.Rtf.IndexOf(@"{\pict\") > -1)//条件成立为图片(richText为一个richTextBox的实例名称)

  4. (最小生成树)Truck History --POJ -- 1789

    链接: http://poj.org/problem?id=1789 Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 2213 ...

  5. 网页程序 vs 桌面程序

    网页程序 vs 桌面程序 阅读:  评论:  作者:Rybby  日期:  来源:rybby.com 所谓的网页程序就是指以网页作为程序的操作界面,通过脚本语言“javascript”或其它客户端语言 ...

  6. calltree+graphviz 绘出项目函数调用图

    install calltree: download from http://linux.softpedia.com/progDownload/calltree-Download-971.html f ...

  7. Oracle定义DES加密解密及MD5加密函数

    http://blog.csdn.net/xdweleven/article/details/38319351   (1)DES加密函数create or replace functionencryp ...

  8. SQL Server 2008 清空删除日志文件(瞬间日志变几M)

    sql 在使用中每次查询都会生成日志,但是如果你长久不去清理,可能整个硬都堆满哦,笔者就遇到这样的情况,直接网站后台都进不去了.下面我们一起来学习一下如何清理这个日志吧 SQL2008清空删除日志: ...

  9. K8S+GitLab-自动化分布式部署ASP.NET Core(二) ASP.NET Core DevOps

    一.介绍 前一篇,写的K8S部署环境的文章,简单的介绍下DevOps(Development和Operations的组合词),高效交付, 自动化流程,来减少软件开发人员和运维人员的沟通.Martin ...

  10. 微信游戏《全民炫舞》开发公司h3d2 engine和QQ炫舞2 布料系统技术介绍

    H3D公司开发的<全民炫舞>上线了. 蝉联IOS榜首很多天. 整理了一下过去公司游戏引擎开发的历史.有兴趣可以去看看 公司游戏引擎开发历史介绍: http://www.h3d.com.cn ...