This commit is contained in:
Redkale
2018-07-22 18:03:30 +08:00
parent 01431a93a4
commit 32a595262d

View File

@@ -221,14 +221,16 @@ public class ObjectDecoder<R extends Reader, T> implements Decodeable<R, T> {
}
if (this.creatorConstructorMembers == null) { //空构造函数
final T result = this.creator.create();
boolean first = true;
while (hasNext(in)) {
DeMember member = in.readFieldName(members);
in.readBlank();
if (member == null) {
in.skipValue(); //跳过不存在的属性的值
} else {
readMemberValue(in, member, result);
readMemberValue(in, member, first, result);
}
first = false;
}
in.readObjectE(typeClass);
return result;
@@ -237,13 +239,14 @@ public class ObjectDecoder<R extends Reader, T> implements Decodeable<R, T> {
final Object[] constructorParams = new Object[fields.length];
final Object[][] otherParams = new Object[this.members.length][2];
int oc = 0;
boolean first = true;
while (hasNext(in)) {
DeMember member = in.readFieldName(members);
in.readBlank();
if (member == null) {
in.skipValue(); //跳过不存在的属性的值
} else {
Object val = readMemberValue(in, member);
Object val = readMemberValue(in, member, first);
boolean flag = true;
for (int i = 0; i < fields.length; i++) {
if (member == fields[i]) {
@@ -254,6 +257,7 @@ public class ObjectDecoder<R extends Reader, T> implements Decodeable<R, T> {
}
if (flag) otherParams[oc++] = new Object[]{member.attribute, val};
}
first = false;
}
in.readObjectE(typeClass);
final T result = this.creator.create(constructorParams);
@@ -264,15 +268,15 @@ public class ObjectDecoder<R extends Reader, T> implements Decodeable<R, T> {
}
}
protected boolean hasNext(Reader in) {
protected boolean hasNext(R in) {
return in.hasNext();
}
protected Object readMemberValue(Reader in, DeMember member) {
protected Object readMemberValue(R in, DeMember member, boolean first) {
return member.read(in);
}
protected void readMemberValue(Reader in, DeMember member, T result) {
protected void readMemberValue(R in, DeMember member, boolean first, T result) {
member.read(in, result);
}