package serializers; public abstract class Transformer<A,B> { public abstract B forward(A a); public abstract A reverse(B a); public abstract A shallowReverse(B a); public abstract A[] sourceArray(int size); public abstract B[] resultArray(int size); public B[] forwardAll(A[] a) { // this is unfortunate shuffling around type variables, but has to do: B[] b = resultArray(a.length); forward(a, b); return b; } /** * Method called to convert an array of items from custom representation to standard one */ public void forward(A[] a, B[] b) { for (int i = 0, len = a.length; i < len; ++i) { b[i] = forward(a[i]); } } public A[] reverseAll(B[] b) { A[] a = sourceArray(b.length); for (int i = 0, len = b.length; i < len; ++i) { a[i] = reverse(b[i]); } return a; } }