import edu.neu.ccs.demeterf.*; import java.util.Arrays; class Q{ S s; R r[]; Q(S ss, R rr[]){ s = ss; r = rr; } } class T{} class R extends T{ Integer i; R(Integer ii) { i=ii;}} class S extends T{ Integer i; S(Integer ii) { i=ii;}} class ToFloat extends ID{ // fold the array Float apply(Float[] s){ Float sum = 0.0f; for (Float item : s) { sum=sum + new Float(item); }; return sum; } Float combine(S s){ return new Float(s.i); } Float combine(R s){ return new Float(s.i); } Float combine(Q q, Float s, Float r){ return new Float(s+r); } } public class ArrayTest { static void p(String s){ System.out.println(s); } public static void main(String args[]){ R r = new R(7); Q q = new Q(new S(5), new R[]{r,r,r,r}); Traversal t = new Traversal(new ToFloat()); p(" Returned: "+t.traverse(q)); // Prints " Returned: 33.0 " p(" Returned 2: "+t.traverse(new T[]{r, new S(5), r, new S(5)})); // Prints " Returned 2: 24.0 " } }