Convert优化
This commit is contained in:
@@ -28,7 +28,9 @@ public abstract class BinaryConvert<R extends Reader, W extends Writer> extends
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract byte[] convertTo(final Object value);
|
public final byte[] convertTo(final Object value) {
|
||||||
|
return convertTo((Type) null, value);
|
||||||
|
}
|
||||||
|
|
||||||
public abstract byte[] convertTo(final Type type, final Object value);
|
public abstract byte[] convertTo(final Type type, final Object value);
|
||||||
|
|
||||||
|
|||||||
@@ -79,23 +79,33 @@ public abstract class Convert<R extends Reader, W extends Writer> {
|
|||||||
|
|
||||||
public abstract <T> T convertFrom(final Type type, final ConvertMask mask, final ByteBuffer... buffers);
|
public abstract <T> T convertFrom(final Type type, final ConvertMask mask, final ByteBuffer... buffers);
|
||||||
|
|
||||||
public abstract void convertTo(final W writer, final Object value);
|
public final void convertTo(final W writer, final Object value) {
|
||||||
|
convertTo(writer, (Type) null, value);
|
||||||
|
}
|
||||||
|
|
||||||
public abstract void convertTo(final W writer, final Type type, final Object value);
|
public abstract void convertTo(final W writer, final Type type, final Object value);
|
||||||
|
|
||||||
public abstract byte[] convertToBytes(final Object value);
|
public final byte[] convertToBytes(final Object value) {
|
||||||
|
return convertToBytes((Type) null, value);
|
||||||
|
}
|
||||||
|
|
||||||
public abstract byte[] convertToBytes(final Type type, final Object value);
|
public abstract byte[] convertToBytes(final Type type, final Object value);
|
||||||
|
|
||||||
public abstract void convertToBytes(final Object value, final ConvertBytesHandler handler);
|
public final void convertToBytes(final Object value, final ConvertBytesHandler handler) {
|
||||||
|
convertToBytes((Type) null, value, handler);
|
||||||
|
}
|
||||||
|
|
||||||
public abstract void convertToBytes(final Type type, final Object value, final ConvertBytesHandler handler);
|
public abstract void convertToBytes(final Type type, final Object value, final ConvertBytesHandler handler);
|
||||||
|
|
||||||
public abstract void convertToBytes(final ByteArray array, final Object value);
|
public final void convertToBytes(final ByteArray array, final Object value) {
|
||||||
|
convertToBytes(array, (Type) null, value);
|
||||||
|
}
|
||||||
|
|
||||||
public abstract void convertToBytes(final ByteArray array, final Type type, final Object value);
|
public abstract void convertToBytes(final ByteArray array, final Type type, final Object value);
|
||||||
|
|
||||||
public abstract ByteBuffer[] convertTo(final Supplier<ByteBuffer> supplier, final Object value);
|
public final ByteBuffer[] convertTo(final Supplier<ByteBuffer> supplier, final Object value) {
|
||||||
|
return convertTo(supplier, (Type) null, value);
|
||||||
|
}
|
||||||
|
|
||||||
public abstract ByteBuffer[] convertTo(final Supplier<ByteBuffer> supplier, final Type type, final Object value);
|
public abstract ByteBuffer[] convertTo(final Supplier<ByteBuffer> supplier, final Type type, final Object value);
|
||||||
|
|
||||||
|
|||||||
@@ -30,7 +30,9 @@ public abstract class TextConvert<R extends Reader, W extends Writer> extends Co
|
|||||||
|
|
||||||
public abstract <T> T convertFrom(final Type type, final String text);
|
public abstract <T> T convertFrom(final Type type, final String text);
|
||||||
|
|
||||||
public abstract String convertTo(final Object value);
|
public final String convertTo(final Object value) {
|
||||||
|
return convertTo((Type) null, value);
|
||||||
|
}
|
||||||
|
|
||||||
public abstract String convertTo(final Type type, final Object value);
|
public abstract String convertTo(final Type type, final Object value);
|
||||||
|
|
||||||
|
|||||||
@@ -202,7 +202,7 @@ public class BsonConvert extends BinaryConvert<BsonReader, BsonWriter> {
|
|||||||
|
|
||||||
//------------------------------ convertTo -----------------------------------------------------------
|
//------------------------------ convertTo -----------------------------------------------------------
|
||||||
@Override
|
@Override
|
||||||
public byte[] convertTo(final Object value) {
|
public byte[] convertTo(final Type type, final Object value) {
|
||||||
if (value == null) {
|
if (value == null) {
|
||||||
final BsonWriter out = pollWriter();
|
final BsonWriter out = pollWriter();
|
||||||
out.writeNull();
|
out.writeNull();
|
||||||
@@ -210,36 +210,18 @@ public class BsonConvert extends BinaryConvert<BsonReader, BsonWriter> {
|
|||||||
offerWriter(out);
|
offerWriter(out);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
return convertTo(value.getClass(), value);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public byte[] convertTo(final Type type, final Object value) {
|
|
||||||
if (type == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
final BsonWriter writer = pollWriter();
|
final BsonWriter writer = pollWriter();
|
||||||
factory.loadEncoder(type).convertTo(writer, value);
|
factory.loadEncoder(type == null ? value.getClass() : type).convertTo(writer, value);
|
||||||
byte[] result = writer.toArray();
|
byte[] result = writer.toArray();
|
||||||
offerWriter(writer);
|
offerWriter(writer);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public byte[] convertToBytes(final Object value) {
|
|
||||||
return convertTo(value);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public byte[] convertToBytes(final Type type, final Object value) {
|
public byte[] convertToBytes(final Type type, final Object value) {
|
||||||
return convertTo(type, value);
|
return convertTo(type, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void convertToBytes(final Object value, final ConvertBytesHandler handler) {
|
|
||||||
convertToBytes(value == null ? null : value.getClass(), value, handler);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void convertToBytes(final Type type, final Object value, final ConvertBytesHandler handler) {
|
public void convertToBytes(final Type type, final Object value, final ConvertBytesHandler handler) {
|
||||||
final BsonWriter writer = pollWriter();
|
final BsonWriter writer = pollWriter();
|
||||||
@@ -251,99 +233,58 @@ public class BsonConvert extends BinaryConvert<BsonReader, BsonWriter> {
|
|||||||
writer.completed(handler, writerConsumer);
|
writer.completed(handler, writerConsumer);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void convertToBytes(final ByteArray array, final Object value) {
|
|
||||||
convertToBytes(array, value == null ? null : value.getClass(), value);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void convertToBytes(final ByteArray array, final Type type, final Object value) {
|
public void convertToBytes(final ByteArray array, final Type type, final Object value) {
|
||||||
final BsonWriter writer = configWrite(new BsonWriter(array).tiny(tiny));
|
final BsonWriter writer = configWrite(new BsonWriter(array).tiny(tiny));
|
||||||
if (type == null) {
|
if (value == null) {
|
||||||
writer.writeNull();
|
writer.writeNull();
|
||||||
} else {
|
} else {
|
||||||
factory.loadEncoder(type).convertTo(writer, value);
|
factory.loadEncoder(type == null ? value.getClass() : type).convertTo(writer, value);
|
||||||
}
|
}
|
||||||
writer.directTo(array);
|
writer.directTo(array);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void convertTo(final OutputStream out, final Object value) {
|
public void convertTo(final OutputStream out, final Object value) {
|
||||||
if (value == null) {
|
convertTo(out, (Type) null, value);
|
||||||
pollWriter(out).writeNull();
|
|
||||||
} else {
|
|
||||||
factory.loadEncoder(value.getClass()).convertTo(pollWriter(out), value);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void convertTo(final OutputStream out, final Type type, final Object value) {
|
public void convertTo(final OutputStream out, final Type type, final Object value) {
|
||||||
if (type == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (value == null) {
|
if (value == null) {
|
||||||
pollWriter(out).writeNull();
|
pollWriter(out).writeNull();
|
||||||
} else {
|
} else {
|
||||||
factory.loadEncoder(type).convertTo(pollWriter(out), value);
|
factory.loadEncoder(type == null ? value.getClass() : type).convertTo(pollWriter(out), value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public ByteBuffer[] convertTo(final Supplier<ByteBuffer> supplier, final Object value) {
|
|
||||||
if (supplier == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
BsonByteBufferWriter out = pollWriter(supplier);
|
|
||||||
if (value == null) {
|
|
||||||
out.writeNull();
|
|
||||||
} else {
|
|
||||||
factory.loadEncoder(value.getClass()).convertTo(out, value);
|
|
||||||
}
|
|
||||||
return out.toBuffers();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ByteBuffer[] convertTo(final Supplier<ByteBuffer> supplier, final Type type, final Object value) {
|
public ByteBuffer[] convertTo(final Supplier<ByteBuffer> supplier, final Type type, final Object value) {
|
||||||
if (supplier == null || type == null) {
|
if (supplier == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
BsonByteBufferWriter writer = pollWriter(supplier);
|
BsonByteBufferWriter writer = pollWriter(supplier);
|
||||||
if (value == null) {
|
if (value == null) {
|
||||||
writer.writeNull();
|
writer.writeNull();
|
||||||
} else {
|
} else {
|
||||||
factory.loadEncoder(type).convertTo(writer, value);
|
factory.loadEncoder(type == null ? value.getClass() : type).convertTo(writer, value);
|
||||||
}
|
}
|
||||||
return writer.toBuffers();
|
return writer.toBuffers();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void convertTo(final BsonWriter writer, final Object value) {
|
public void convertTo(final BsonWriter writer, final Type type, final Object value) {
|
||||||
if (value == null) {
|
if (value == null) {
|
||||||
writer.writeNull();
|
writer.writeNull();
|
||||||
} else {
|
} else {
|
||||||
factory.loadEncoder(value.getClass()).convertTo(writer, value);
|
factory.loadEncoder(type == null ? value.getClass() : type).convertTo(writer, value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void convertTo(final BsonWriter writer, final Type type, final Object value) {
|
|
||||||
if (type == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
factory.loadEncoder(type).convertTo(writer, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public BsonWriter convertToWriter(final Object value) {
|
|
||||||
if (value == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return convertToWriter(value.getClass(), value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public BsonWriter convertToWriter(final Type type, final Object value) {
|
public BsonWriter convertToWriter(final Type type, final Object value) {
|
||||||
if (type == null) {
|
if (value == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
final BsonWriter writer = writerPool.get().tiny(tiny);
|
final BsonWriter writer = writerPool.get().tiny(tiny);
|
||||||
factory.loadEncoder(type).convertTo(writer, value);
|
factory.loadEncoder(type == null ? value.getClass() : type).convertTo(writer, value);
|
||||||
return writer;
|
return writer;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -324,30 +324,20 @@ public class JsonConvert extends TextConvert<JsonReader, JsonWriter> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//------------------------------ convertTo -----------------------------------------------------------
|
//------------------------------ convertTo -----------------------------------------------------------
|
||||||
@Override
|
|
||||||
public String convertTo(final Object value) {
|
|
||||||
if (value == null) {
|
|
||||||
return "null";
|
|
||||||
}
|
|
||||||
return convertTo(value.getClass(), value);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String convertTo(final Type type, final Object value) {
|
public String convertTo(final Type type, final Object value) {
|
||||||
if (type == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
if (value == null) {
|
if (value == null) {
|
||||||
return "null";
|
return "null";
|
||||||
}
|
}
|
||||||
JsonBytesWriter writer = pollJsonBytesWriter();
|
JsonBytesWriter writer = pollJsonBytesWriter();
|
||||||
|
final Type t = type == null ? value.getClass() : type;
|
||||||
Encodeable encoder = this.lastConvertEncodeable;
|
Encodeable encoder = this.lastConvertEncodeable;
|
||||||
if (encoder == null || encoder.getType() != type) {
|
if (encoder == null || encoder.getType() != t) {
|
||||||
encoder = factory.loadEncoder(type);
|
encoder = factory.loadEncoder(t);
|
||||||
this.lastConvertEncodeable = encoder;
|
this.lastConvertEncodeable = encoder;
|
||||||
}
|
}
|
||||||
if (encoder.specifyable()) {
|
if (encoder.specifyable()) {
|
||||||
writer.specificObjectType(type);
|
writer.specificObjectType(t);
|
||||||
}
|
}
|
||||||
encoder.convertTo(writer, value);
|
encoder.convertTo(writer, value);
|
||||||
|
|
||||||
@@ -356,30 +346,20 @@ public class JsonConvert extends TextConvert<JsonReader, JsonWriter> {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public byte[] convertToBytes(final Object value) {
|
|
||||||
if (value == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return convertToBytes(value.getClass(), value);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public byte[] convertToBytes(final Type type, final Object value) {
|
public byte[] convertToBytes(final Type type, final Object value) {
|
||||||
if (type == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
if (value == null) {
|
if (value == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
JsonBytesWriter writer = pollJsonBytesWriter();
|
JsonBytesWriter writer = pollJsonBytesWriter();
|
||||||
|
final Type t = type == null ? value.getClass() : type;
|
||||||
Encodeable encoder = this.lastConvertEncodeable;
|
Encodeable encoder = this.lastConvertEncodeable;
|
||||||
if (encoder == null || encoder.getType() != type) {
|
if (encoder == null || encoder.getType() != t) {
|
||||||
encoder = factory.loadEncoder(type);
|
encoder = factory.loadEncoder(t);
|
||||||
this.lastConvertEncodeable = encoder;
|
this.lastConvertEncodeable = encoder;
|
||||||
}
|
}
|
||||||
if (encoder.specifyable()) {
|
if (encoder.specifyable()) {
|
||||||
writer.specificObjectType(type);
|
writer.specificObjectType(t);
|
||||||
}
|
}
|
||||||
encoder.convertTo(writer, value);
|
encoder.convertTo(writer, value);
|
||||||
|
|
||||||
@@ -388,84 +368,66 @@ public class JsonConvert extends TextConvert<JsonReader, JsonWriter> {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void convertToBytes(final Object value, final ConvertBytesHandler handler) {
|
|
||||||
convertToBytes(value == null ? null : value.getClass(), value, handler);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void convertToBytes(final Type type, final Object value, final ConvertBytesHandler handler) {
|
public void convertToBytes(final Type type, final Object value, final ConvertBytesHandler handler) {
|
||||||
JsonBytesWriter writer = pollJsonBytesWriter();
|
JsonBytesWriter writer = pollJsonBytesWriter();
|
||||||
if (type == null) {
|
if (value == null) {
|
||||||
writer.writeNull();
|
writer.writeNull();
|
||||||
} else {
|
} else {
|
||||||
|
final Type t = type == null ? value.getClass() : type;
|
||||||
Encodeable encoder = this.lastConvertEncodeable;
|
Encodeable encoder = this.lastConvertEncodeable;
|
||||||
if (encoder == null || encoder.getType() != type) {
|
if (encoder == null || encoder.getType() != t) {
|
||||||
encoder = factory.loadEncoder(type);
|
encoder = factory.loadEncoder(t);
|
||||||
this.lastConvertEncodeable = encoder;
|
this.lastConvertEncodeable = encoder;
|
||||||
}
|
}
|
||||||
if (encoder.specifyable()) {
|
if (encoder.specifyable()) {
|
||||||
writer.specificObjectType(type);
|
writer.specificObjectType(t);
|
||||||
}
|
}
|
||||||
encoder.convertTo(writer, value);
|
encoder.convertTo(writer, value);
|
||||||
}
|
}
|
||||||
writer.completed(handler, offerBytesConsumer);
|
writer.completed(handler, offerBytesConsumer);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void convertToBytes(final ByteArray array, final Object value) {
|
|
||||||
convertToBytes(array, value == null ? null : value.getClass(), value);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void convertToBytes(final ByteArray array, final Type type, final Object value) {
|
public void convertToBytes(final ByteArray array, final Type type, final Object value) {
|
||||||
JsonBytesWriter writer = configWrite(new JsonBytesWriter(tiny, array));
|
JsonBytesWriter writer = configWrite(new JsonBytesWriter(tiny, array));
|
||||||
if (type == null) {
|
if (value == null) {
|
||||||
writer.writeNull();
|
writer.writeNull();
|
||||||
} else {
|
} else {
|
||||||
|
final Type t = type == null ? value.getClass() : type;
|
||||||
Encodeable encoder = this.lastConvertEncodeable;
|
Encodeable encoder = this.lastConvertEncodeable;
|
||||||
if (encoder == null || encoder.getType() != type) {
|
if (encoder == null || encoder.getType() != t) {
|
||||||
encoder = factory.loadEncoder(type);
|
encoder = factory.loadEncoder(t);
|
||||||
this.lastConvertEncodeable = encoder;
|
this.lastConvertEncodeable = encoder;
|
||||||
}
|
}
|
||||||
if (encoder.specifyable()) {
|
if (encoder.specifyable()) {
|
||||||
writer.specificObjectType(type);
|
writer.specificObjectType(t);
|
||||||
}
|
}
|
||||||
encoder.convertTo(writer, value);
|
encoder.convertTo(writer, value);
|
||||||
}
|
}
|
||||||
writer.directTo(array);
|
writer.directTo(array);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void convertTo(final OutputStream out, final Object value) {
|
|
||||||
if (value == null) {
|
|
||||||
configWrite(new JsonStreamWriter(tiny, out)).writeNull();
|
|
||||||
} else {
|
|
||||||
convertTo(out, value.getClass(), value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void convertTo(final OutputStream out, final Type type, final Object value) {
|
public void convertTo(final OutputStream out, final Type type, final Object value) {
|
||||||
if (type == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (value == null) {
|
if (value == null) {
|
||||||
configWrite(new JsonStreamWriter(tiny, out)).writeNull();
|
configWrite(new JsonStreamWriter(tiny, out)).writeNull();
|
||||||
} else {
|
} else {
|
||||||
|
final Type t = type == null ? value.getClass() : type;
|
||||||
JsonStreamWriter writer = configWrite(new JsonStreamWriter(tiny, out));
|
JsonStreamWriter writer = configWrite(new JsonStreamWriter(tiny, out));
|
||||||
Encodeable encoder = this.lastConvertEncodeable;
|
Encodeable encoder = this.lastConvertEncodeable;
|
||||||
if (encoder == null || encoder.getType() != type) {
|
if (encoder == null || encoder.getType() != t) {
|
||||||
encoder = factory.loadEncoder(type);
|
encoder = factory.loadEncoder(t);
|
||||||
this.lastConvertEncodeable = encoder;
|
this.lastConvertEncodeable = encoder;
|
||||||
}
|
}
|
||||||
if (encoder.specifyable()) {
|
if (encoder.specifyable()) {
|
||||||
writer.specificObjectType(type);
|
writer.specificObjectType(t);
|
||||||
}
|
}
|
||||||
encoder.convertTo(writer, value);
|
encoder.convertTo(writer, value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ByteBuffer[] convertTo(final Supplier<ByteBuffer> supplier, final Object value) {
|
public ByteBuffer[] convertTo(final Supplier<ByteBuffer> supplier, final Type type, final Object value) {
|
||||||
if (supplier == null) {
|
if (supplier == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -473,59 +435,26 @@ public class JsonConvert extends TextConvert<JsonReader, JsonWriter> {
|
|||||||
if (value == null) {
|
if (value == null) {
|
||||||
out.writeNull();
|
out.writeNull();
|
||||||
} else {
|
} else {
|
||||||
factory.loadEncoder(value.getClass()).convertTo(out, value);
|
final Type t = type == null ? value.getClass() : type;
|
||||||
|
out.specificObjectType(t);
|
||||||
|
factory.loadEncoder(t).convertTo(out, value);
|
||||||
}
|
}
|
||||||
return out.toBuffers();
|
return out.toBuffers();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public ByteBuffer[] convertTo(final Supplier<ByteBuffer> supplier, final Type type, final Object value) {
|
|
||||||
if (supplier == null || type == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
JsonByteBufferWriter out = configWrite(new JsonByteBufferWriter(tiny, supplier));
|
|
||||||
if (value == null) {
|
|
||||||
out.writeNull();
|
|
||||||
} else {
|
|
||||||
out.specificObjectType(type);
|
|
||||||
factory.loadEncoder(type).convertTo(out, value);
|
|
||||||
}
|
|
||||||
return out.toBuffers();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void convertTo(final JsonWriter writer, final Object value) {
|
|
||||||
if (value == null) {
|
|
||||||
writer.writeNull();
|
|
||||||
} else {
|
|
||||||
Class type = value.getClass();
|
|
||||||
Encodeable encoder = this.lastConvertEncodeable;
|
|
||||||
if (encoder == null || encoder.getType() != type) {
|
|
||||||
encoder = factory.loadEncoder(type);
|
|
||||||
this.lastConvertEncodeable = encoder;
|
|
||||||
}
|
|
||||||
if (encoder.specifyable()) {
|
|
||||||
writer.specificObjectType(type);
|
|
||||||
}
|
|
||||||
encoder.convertTo(writer, value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void convertTo(final JsonWriter writer, final Type type, final Object value) {
|
public void convertTo(final JsonWriter writer, final Type type, final Object value) {
|
||||||
if (type == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (value == null) {
|
if (value == null) {
|
||||||
writer.writeNull();
|
writer.writeNull();
|
||||||
} else {
|
} else {
|
||||||
|
final Type t = type == null ? value.getClass() : type;
|
||||||
Encodeable encoder = this.lastConvertEncodeable;
|
Encodeable encoder = this.lastConvertEncodeable;
|
||||||
if (encoder == null || encoder.getType() != type) {
|
if (encoder == null || encoder.getType() != t) {
|
||||||
encoder = factory.loadEncoder(type);
|
encoder = factory.loadEncoder(t);
|
||||||
this.lastConvertEncodeable = encoder;
|
this.lastConvertEncodeable = encoder;
|
||||||
}
|
}
|
||||||
if (encoder.specifyable()) {
|
if (encoder.specifyable()) {
|
||||||
writer.specificObjectType(type);
|
writer.specificObjectType(t);
|
||||||
}
|
}
|
||||||
encoder.convertTo(writer, value);
|
encoder.convertTo(writer, value);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user