- 论坛徽章:
- 0
|
最近在看JMX的文档,经常会看一个叫signature的东西,比如在JSR160中 Object MBeanServerConnection.
invoke
(
ObjectName
name,
String
operationName,
Object
[] params,
String
[] signature)方法,第四个参数就是signature,这个函数的用来调用MBean上的操作。signature意思就是操作(方法)的签名。但是对于它是描述些东西却不是很了解,于是在求助于网络,在这里http://www.javaworld.com.tw/jute/post/view?age=0&bid=29&ppg=1&sty=1&id=183185&tpg=1找到了答案,整理了一下:
在1.5以前,一般提到的 "operation(method_
signature",它可以说是一个操作(方法)的一种规格(名称、参数类型及参数的顺序),如果一个类中有两个操作(方法) 的 signature 是相同的,即是说其名称、参数类型及参数的顺序是完全相同,就不符合Java PL 的规范了。比如下面例子
public class Foo {
public void bar(String s) {...}
public void bar(String s, int n) {...}
Foo类中兩个 bar method 的参数数量不同,它们的signature就不同了,形成一组 overloading methods。所以因一个类中可以有多个名称一样的方法,提到方法时就必須把参数类型和顺序也加进去,用signature来区分具体的哪一个方法。
public class Foo1 {
public Integer getData() {...}
public String getData() {...}
}
像这个Foo1类, 方法getData()的signature是一样,就不合JAVA PL规范了。
但是在1.5以后,泛型的加入,signature所要表达的东西又有些不一样了,在vm spec中对signature的定义是会加上泛类位,
方法及类型等泛型信息。
如JRE 1.5 core classes里面的
http://java.sun.com/j2se/1.5.0/docs/api/java/util/Collections.html 中
public static
replaceAll(java.util.List,
T oldVal,T newVal)
)
这个方法就等同于
[color="#555555"]1
public static Object boolean replaceAll(java.util.List, java.lang.Object, java.lang.Object)
它的signature 是:
[color="#336699"](Ljava/util/List;TT;TT;)Z
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/93476/showart_1864533.html |
|