1. No private attributes (all state is transparent and immutable). 2. All methods that transform an object return a transformed copy. So instead of:
rectangle.stretch_x(2.5);
you have: newRectangle = rectangle.stretched_x(2.5);
Even this very small move here moves you way outside Java as typically programmed. This means further that even at this level (the most basic level of FP), your program will:1. Be unable to work with standard libraries without mixing paradigms
2. Be unable to be used in other projects because of the same problems.
Given that ABCL uses supertypes to allow round-trips between Java and Common Lisp, I am fairly sure that functors should be possible in Java, if not elegant.