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. JAVA服务器与C#客户端的通信技术调研

    JAVA服务器与C#客户端的通信技术调研 研究背景及目的: ARPG项目的需求:需要将现有的服务器从C++的编写平台换为java语言.在对需求进行分析的过程中,发现几点需要研究实现的问题 java与c ...

  2. OpenDiscussion_DataDrivenDesign

    本文源于公司内部技术交流,如有不当之处,还请指正. Content: 1. What is Data-driven design? 2. WPF revolution. 3. More about O ...

  3. Android开源库集合(控件)

    RecycleView: RecycleView功能增强 https://github.com/Malinskiy/SuperRecyclerView RecycleView功能增强(拖拽,滑动删除, ...

  4. BitAdminCore框架更新日志20180519

    20180519更新内容 昨天更新的版本,早上自己下载下来发现创建项目不成功. 这个问题已经多次出现,主要是cookiecutter编码问题,项目引用大量外部js文件,部分文件在复制的时候编码较验不通 ...

  5. NetCore偶尔有用篇:NetCore项目发布为Nuget包

    一.简介 1.nuget大家已经不陌生. 2.netcore默认引用便是nuget,并处理了嵌套关系. 3.netcore已经支持直接编译生成nuget包. 4.本文介绍如何把自己建立的项目发布为nu ...

  6. 缓存 - 内存数据库Redis

    客户端 Redis Desktop Manager 官网 新版的收费,或者要分享什么的.0.8.8的旧版才免费?:https://github.com/uglide/RedisDesktopManag ...

  7. ASP.NET 实现多页面合并一页显示

    目前业务有一个需求: 就是把多个网页合并到一个页面显示, 在实现过程中我一般使用两种方法: 利用母版页设置导航栏, 定位到每个网页; 利用用户控件( .acsx 后缀的文件), 但是有个问题就是传参比 ...

  8. 用MVC5+EF6+WebApi 做一个考试功能(六) 仓储模式 打造EF通用仓储类

    前言 年底工作比较忙,年度总结还没写,项目要上线,回老家过年各种准备.尤其是给长辈给侄子侄女准备礼物头都大了. 原来想年前先出一版能用的,我看有点悬了,尽量先把大体功能弄出来,扔掉一些,保证能考试,然 ...

  9. kernel 调试 打印IP地址

    #define NIPQUAD(addr) \ ((unsigned char *)&addr)[0], \ ((unsigned char *)&addr)[1], \ ((unsi ...

  10. 程序媛计划——python爬虫

    #用selenium打开百度首页 #第一次运行代码时应该在safari开发者选项中设置'allow remote automation' from selenium import webdriver ...