XML:
<FooBar>
<foo name="FooName">
<bar .../>
<bar .../>
</foo>
</FooBar>
Java:
class FooBar {
private Foo foo;
}
我想要的是一种不在Foo
中存储FooBar
对象的方法,而是在静态Map中添加Foo
对象并仅在类{中存储属性名称(FooName) {1}}。
换句话说,我只想在需要时解析FooBar
(未知名称)并将名称存储在foo
中。
这样的事情:
FooBar.java
FooBar
FooConverter.java
class FooBar {
@XStreamConverter(FooConverter.class)
private String foo;
}
目的是只解析一次public class FooConverter extends ReflectionConverter {
public FooConverter(Mapper mapper, ReflectionProvider reflectionProvider) {
super(mapper, reflectionProvider);
}
@Override
public void marshal(Object o, HierarchicalStreamWriter writer, MarshallingContext mc) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext uc) {
String name = reader.getAttribute("name");
Foo foo = FOOMAP.get(name);
if (foo != null) {
return name;
}
foo = (Foo) super.unmarshal(reader, uc);
FOOMAP.put(name, foo);
return name;
}
@Override
public boolean canConvert(Class type) {
return type == Foo.class || type == String.class;
}
}
标记,如果我们已经知道它(相同的名称属性)并且能够用foo
做一种包含,因为“FooName”已经知道
答案 0 :(得分:0)
doUnmarshal
有一个函数@Override
public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext uc) {
String name = reader.getAttribute("name");
Foo foo = FOOMAP.get(name);
if (foo != null) {
return name;
}
foo = (Foo) super.doUnmarshal(new Foo(), reader, uc);
if(foo.getSomething() != null) // check if foo is not empty
FOOMAP.put(name, foo);
return name;
}
@Override
public boolean canConvert(Class type) {
return type.equals(String.class);
}
,第一个参数是一个Object。
+ (NSURL *)createRequestURLWithChannel:(NSString *)channelName {
NSString *sName = [channelName stringByReplacingOccurrencesOfString:@"_" withString:@"-"];
NSString *channelvideo = [NSString stringWithFormat:@"%@", sName];
return [NSURL URLWithString:url];
}
它不好但是有效。