Scala: Problems use java interfaces -
i wanted use jemmyfx framework, written in java, in scala. there several problems cannot solve.
in java, if wanted search label wrapper, can in way:
wrap<? extends label> label = root.root.lookup().wrap().as(parent.class, node.class).lookup(label.class).wrap(); if want in scala, no working solution. have tried in way:
val label: wrap[_<:label] = root.root.lookup().wrap().as(classof[parent[_<:label]], classof[node]).lookup(classof[label]).wrap() but scala tells me: - inferred type arguments [javafx.scene.node,org.jemmy.interfaces.parent[_ <: javafx.scene.control.label]] not conform method as's type parameter bounds
[type,interface <: org.jemmy.interfaces.typecontrolinterface[type]] the method "as":
public <type, interface extends typecontrolinterface<type>> interface as(class<interface> interfaceclass, class<type> type) the method "lookup":
public abstract <st extends t> lookup<st> lookup(class<st> paramclass); the class "parent":
public abstract interface parent<t> extends typecontrolinterface<t> so don't it, how can use these interfaces in scala. there solution, or there limitations of use between scala , java?
i know nothing jemmyfx, here's 2 cents. it's not interoperability issue between scala , java. it's issue of correctly typing call as method.
the as method signature says [type, interface <: typecontrolinterface[type]] means interface type must parametrized same type type. because of this, cannot use classof[parent[label]] in first argument , classof[node] in second argument: must use either node or label twice.
i've tried reproduce issue following scala code:
trait typecontrolinterface[t] trait parent[t] extends typecontrolinterface[t] trait node case class label(s: string) extends node object test { def as[type, interface <: typecontrolinterface[type]](interfaceclass: class[interface], typeclass: class[type]): interface = ??? def main(args: array[string]) { val label1 = as(classof[parent[label]], classof[label]) // compiles val label2 = as(classof[parent[node]], classof[node]) // compiles val label3 = as(classof[parent[label]], classof[node]) // doesn't compile } } note if as method had been defined this:
def as[type, interface <: typecontrolinterface[_ <: type]](...) the last line in example above have compiled.
Comments
Post a Comment