Hi everybody, i have been translate valid java code with example of using jenetic (java library for genetic programming) to scala.
java code:
import org.jenetics.BitChromosome;
import org.jenetics.BitGene;
import org.jenetics.Genotype;
import org.jenetics.engine.Engine;
import org.jenetics.util.Factory;
public class RunTestJava {
public static void main(String[] args) {
Factory<Genotype<BitGene>> gtf = Genotype.of(BitChromosome.of(10, 0.5));
Engine<BitGene, Integer> engine = Engine.builder(RunTestJava::eval, gtf).build();
}
static private Integer eval(Genotype<BitGene> gt) {
return gt.getChromosome().as(BitChromosome.class).bitCount();
}
}
scala code:
import java.util.function.{Function => JFunction}
import org.jenetics.engine.Engine
import org.jenetics.util.Factory
import org.jenetics.{BitChromosome, BitGene, Genotype}
object RunTest extends App {
val ff = new JFunction[Genotype[BitGene], Integer] {
override def apply(t: Genotype[BitGene]): Integer =
t.getChromosome.as(classOf[BitChromosome]).bitCount()
}
val gtf: Factory[Genotype[BitGene]] = Genotype.of(BitChromosome.of(10, 0.5))
val engine: Engine[BitGene, Integer] = Engine.builder(ff, gtf).build
}
and i have this compile-time error (it’s point to builder method):
Error:(17, 49) overloaded method value builder with alternatives:
[T, G <: org.jenetics.Gene[_, G], C <: Comparable[_ >: C]](x$1: java.util.function.Function[_ >: T, _ <: C], x$2: org.jenetics.engine.Codec[T,G])org.jenetics.engine.Engine.Builder[G,C] <and>
[G <: org.jenetics.Gene[_, G], C <: Comparable[_ >: C]](x$1: java.util.function.Function[_ >: org.jenetics.Genotype[G], _ <: C], x$2: org.jenetics.Chromosome[G], x$3: org.jenetics.Chromosome[G]*)org.jenetics.engine.Engine.Builder[G,C] <and>
[G <: org.jenetics.Gene[_, G], C <: Comparable[_ >: C]](x$1: java.util.function.Function[_ >: org.jenetics.Genotype[G], _ <: C], x$2: org.jenetics.util.Factory[org.jenetics.Genotype[G]])org.jenetics.engine.Engine.Builder[G,C] <and>
[T, G <: org.jenetics.Gene[_, G], C <: Comparable[_ >: C]](x$1: org.jenetics.engine.Problem[T,G,C])org.jenetics.engine.Engine.Builder[G,C]
cannot be applied to (java.util.function.Function[org.jenetics.Genotype[org.jenetics.BitGene],Integer], org.jenetics.util.Factory[org.jenetics.Genotype[org.jenetics.BitGene]])
val engine: Engine[BitGene, Integer] = Engine.builder(ff, gtf).build
I know about problems with overloading in scala, but i annotate all types explicit.
How can i resolve this error?