2014-01-31 12 views
6

I Hierarchie haben für meine interfaceImplementierung von Multi-Level-Java-Schnittstellen in Scala

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(); 
} 

in java folgenden Wenn ich versuche, Adapter in scala zu implementieren, wie

class MultiGetFunction extends Adapter { 
    def getId() : String = this.getClass.getName 
} 

folgt erhalte ich folgende Fehler

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 
+0

http://stackoverflow.com/q/5279149/1296806 das schließt eine klassische paulp Antwort ein. –

Antwort

16

Im Allgemeinen ist es ein Schmerz, mit rohen Typen im Java-Code von Scala zu arbeiten.

Versuchen Sie die folgenden:

public interface Function extends Identifiable<String> { 
    public String getId(); 
} 

Der Fehler wahrscheinlich wegen Unfähigkeit der Compiler den Typ T wie kein Typ zu bestimmen erwähnt wird, wenn Function extends Identifiable erklärt. Dies wird anhand des folgenden Fehlers erläutert:

Scala ist kompatibel mit Java 1.5 und höher. Für die vorherigen Versionen müssen Sie herumhacken. Wenn Sie nicht Adapter ändern können, dann können Sie ein Scala-Wrapper in Java erstellen:

public abstract class ScalaAdapter extends Adapter { 

    @Override 
    public String getId() { 
     // TODO Auto-generated method stub 
     return getScalaId(); 
    } 

    public abstract String getScalaId(); 

} 

Und diese dann in Scala verwenden:

scala> class Multi extends ScalaAdapter { 
    |  def getScalaId():String = "!2" 
    | } 
defined class Multi 
+0

Dank Jatin, aber ich kann Java Definition nicht ändern und meine Java Version ist 1.6 – Avinash

+0

@Avinash Aktualisiert den Code. Dies sollte es funktionieren lassen. – Jatin