public interface CompositeDataView
一个Java类可以实现此接口,以表明它是如何被转化为CompositeData
通过MXBean框架。
使用此类的一个典型方法是除了在MXBean框架提供的CompositeType
中声明的内容外,还可以向CompositeData
添加额外的项目。 为此,您必须创建另一个CompositeType
具有所有相同的项目,加上额外的项目。
例如,假设你有一个类Measure
,它由一个叫做units
的字符串和一个value
,它是一个long
或一个double
。 它可能看起来像这样:
public class Measure implements CompositeDataView {
private String units;
private Number value; // a Long or a Double
public Measure(String units, Number value) {
this.units = units;
this.value = value;
}
public static Measure from(CompositeData cd) {
return new Measure((String) cd.get("units"),
(Number) cd.get("value"));
}
public String getUnits() {
return units;
}
// Can't be called getValue(), because Number is not a valid type
// in an MXBean, so the implied "value" property would be rejected.
public Number _getValue() {
return value;
}
public CompositeData toCompositeData(CompositeType ct) {
try {
List<String> itemNames = new ArrayList<String>(ct.keySet());
List<String> itemDescriptions = new ArrayList<String>();
List<OpenType<?>> itemTypes = new ArrayList<OpenType<?>>();
for (String item : itemNames) {
itemDescriptions.add(ct.getDescription(item));
itemTypes.add(ct.getType(item));
}
itemNames.add("value");
itemDescriptions.add("long or double value of the measure");
itemTypes.add((value instanceof Long) ? SimpleType.LONG :
SimpleType.DOUBLE);
CompositeType xct =
new CompositeType(ct.getTypeName(),
ct.getDescription(),
itemNames.toArray(new String[0]),
itemDescriptions.toArray(new String[0]),
itemTypes.toArray(new OpenType<?>[0]));
CompositeData cd =
new CompositeDataSupport(xct,
new String[] {"units", "value"},
new Object[] {units, value});
assert ct.isValue(cd); // check we've done it right
return cd;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
该CompositeType
将出现在openType
的领域Descriptor
这种类型的属性或操作中,只显示units
项目,但实际CompositeData
所产生将同时拥有units
和value
。
MXBean
Modifier and Type | Method and Description |
---|---|
CompositeData |
toCompositeData(CompositeType ct)
返回一个对应于该对象中的值的
CompositeData 。
|
CompositeData toCompositeData(CompositeType ct)
返回一个对应于该对象中的值的CompositeData
。 返回的值通常应的一个实例CompositeDataSupport
,或序列化作为一类CompositeDataSupport
经由writeReplace
方法。 否则,接收对象的远程客户端可能无法重构。
ct
- 预期的CompositeType
的返回值。
如果返回值为cd
,那么cd.getCompositeType().equals(ct)
应为true。
通常这是因为cd
是一个CompositeDataSupport
构造的ct
作为其CompositeType
。
CompositeData
.