Generic class to generate combinations
BitSet

A BitSet is deliberately designed to be a memory efficient way to hold Boolean values.  

It also has initialize methods (clear and set) already, so no need for initArray.  In combination with nextSetBit and nextClearBit (or the previous variants), those methods can replace moveForward.  And copyBack isn't necessary without moveForward.  

The single increment for loop in incrementArray would not be necessary with a BitSet.  Again, the nextSetBit and previousSetBit methods would allow you to jump through multiple steps at once.  

I haven't compared performance, but generally built-in methods are more efficient than custom methods.  The counter-argument here might be that a BitSet is more space efficient than time efficient.  Or that using the built-in methods involves algorithmic tradeoffs.  You'd have to test to see.  

Nitpick

Choosen is not a word.  Although the base word is choose, the past participle is chosen with a single o.  But the variable doesn't really hold what has been chosen.  It holds a count of how many choices should be set to true.  The BitSet definition suggests that the best name for this is cardinality.  At least that's the name of the BitSet method.  

BitSet also uses size to represent the total number of choices.  And uses length for something else.  Consider switching the parameter name length to size to match.  Not because length is a bad name, just inconsistent with BitSet.