in bijection-clojure/codegen/GeneratorWorkaroundJava.scala [7:38]
def conversionN(n: Int) = {
val intypes = (1 to n).map(i => "I" + i.toString).toList
val invalues = intypes.map(_.toLowerCase)
val intv = intypes.zip(invalues).map{ case (t, v) => s"$t $v"}
val inobjv = invalues.map(v => s"Object $v")
val casts = intypes.zip(invalues).map{ case (t, v) => s"($t)$v"}
def render(args: List[String]) = args.mkString(", ")
s"""
public static final <O, ${render(intypes)}> Bijection<Function$n<${render(intypes)}, O>, IFn> function${n}ToIFn() {
return new AbstractBijection<Function$n<${render(intypes)}, O>, IFn>() {
public final AFn apply(Function${n}<${render(intypes)}, O> fna) {
final Function${n}<${render(intypes)}, O> fn = fna;
return new AFn() {
public final Object invoke(${render(inobjv)}) {
return (Object)fn.apply(${render(casts)});
}
};
}
public final Function${n}<${render(intypes)}, O> invert(IFn fna) {
final IFn fn = fna;
return new Function${n}<${render(intypes)}, O>(){
public final O apply(${render(intv)}) {
return (O)fn.invoke(${render(invalues)});
}
};
}
};
}
"""
}