Implementing Multilevel Java Interfaces in Scala
generics, java, scala, scala-java-interop
Solution
In general, it is a pain working with raw types in java code from Scala.
Try the below:
public interface Function extends Identifiable<String> {
public String getId();
}
The error is probably due to inability of compiler to determine the type `T` as no type is mentioned when declaring `Function extends Identifiable`. This is explained from error:
:17: error: overriding method getId in trait Identifiable of type ()T; method getId has incompatible type
Scala is made to be compatible with Java 1.5 and greater. For the previous versions, you need to hack around. If you cannot change `Adapter`, then you can create a Scala wrapper in Java:
public abstract class ScalaAdapter extends Adapter {
@Override
public String getId() {
// TODO Auto-generated method stub
return getScalaId();
}
public abstract String getScalaId();
}
And then use this in Scala:
scala> class Multi extends ScalaAdapter {
| def getScalaId():String = "!2"
| }
defined class Multi
Problem
I have following hierarchy in `java` for my `interface` ``` public interface Identifiable<T extends Comparable<T>> extends Serializable { public T getId(); } public interface Function extends Identifiable { public String getId(); } public abstract class Adapter implements Function { public abstract String getId(); } ``` When I try to implement `Adapter` in `scala` as follows ``` class MultiGetFunction extends Adapter { def getId() : String = this.getClass.getName } ``` I am getting following error ``` Multiple markers at this line - overriding method getId in trait Identifiable of type ()T; method getId has incompatible type - overrides Adapter.getId - implements Function.getId - implements Identifiable.getId ```