<b>(a)</b> void getBitCombinations(CombinationHandler ch, BitSet bs, int start, int current, int target) { if (current == target) { // success, so process the combination // (clone 'bs' so that we're sure it's not modified) ch.process((BitSet) bs.clone()); return; } if (start == a.length) return; // failure bs.set(start); current++; getBitCombinations(ch, bs, start + 1, current, target); bs.clear(start); current--; getBitCombinations(ch, bs, start + 1, current, target); } <b>(b)</b> import java.util.*; /** * An interface that defines a callback method for handling * combinations. */ public interface CombinationHandler { /** * The combination-handling method, called back by the * general routine. */ public void process(BitSet combination); }
Example 3: (a) A version of the code that passes solutions to a callback function; (b) an interface for exposing callback functions that process solutions.