此规则会标记在 javax.management.ObjectName 构造函数的域部分可能使用的双斜杠“//”。 JSR 255 打算在 javax.management.ObjectName 的域部分使用“//”作为“级联”的分隔符。 虽然 JSR 255 并不是 Java SE 6 的一部分,但是,建议不要让 ObjectName 的域部分包含“//”字符串,以避免将来发生兼容性问题。
ObjectName 的格式为:
domain:key1=value1,key2=value2,key3=value3,*
并且具有键属性的变量编号。
如果应用程序包含具有 ObjectName 的 MBean,而 ObjectName 具有带双斜杠的域名,那么您将需要更改这些 MBean 的域名。
此规则会检查 ObjectName 构造函数,如果有可能,还要检查字符串的域部分,以验证是否没有双斜杠。 它将能够扫描构造函数,这些构造函数将传递在同一编译单元中定义的字符串字面值或终态字符串变量。 如果它可以检查域名,那么它将仅标记那些违反了此规则的构造函数。
此规则还将标记满足以下条件的 ObjectName 构造函数实例:此构造函数的域名编码为不容易检查的变量。 手动检查这些实例,以验证域名中不包含双斜杠。
示例 1:
public MyClass {
import javax.management.ObjectName;
ObjectName myObj1 = ObjectName("domain//Name:key1=value1,*");
ObjectName myObj2 = ObjectName("domaiName", "key1", "value1");
Hashtable<String,String> myHashTable = new Hashtable<String,String>();
table.put("key1", "value1");
ObjectName myObj3 = ObjectName("domain//Name", myHashTable");
}
在示例 1 中,此规则将标记 myObj1 和 myObj3,因为那些字符串中包含“//”。 将不会标记 myObj2。
示例 2:
public MyClass {
import javax.management.ObjectName;
final String myDomainName = "domainName";
ObjectName myObj1 = ObjectName(myDomainName, "key1", "value1");
final String myObjectName = "domain//Name:key1=value1";
ObjectName myObj2 = ObjectName(myObjectName);
}
在示例 2 中,此规则会标记 myObj2,但不会标记 myObj1。
示例 3:
public MyClass {
import javax.management.ObjectName;
private ObjectName getMyObjectName(String myObjectName){
ObjectName myObj = ObjectName(myObjectName);
}
}
在示例 3 中,将标记 myObj,因为代码无法确定域名。
有关更多信息,请参阅: