private Date create(Kryo kryo, Class<? extends Date> type, long time) throws KryoException { if (type == Date.class || type == null) { return new Date(time); } if (type == Timestamp.class) { return new Timestamp(time); } if (type == java.sql.Date.class) { return new java.sql.Date(time); } if (type == Time.class) { return new Time(time); } // other cases, reflection try { // Try to avoid invoking the no-args constructor // (which is expected to initialize the instance with the current time) Constructor<? extends Date> constructor = type.getConstructor(long.class); if (!constructor.isAccessible()) { try { constructor.setAccessible(true); } catch (SecurityException se) { } } return constructor.newInstance(time); } catch (Exception ex) { // default strategy Date d = (Date) kryo.newInstance(type); d.setTime(time); return d; } }
public KryoSerializable read(Kryo kryo, Input input, Class<KryoSerializable> type) { KryoSerializable object = kryo.newInstance(type); kryo.reference(object); object.read(kryo, input); return object; }