2013-04-17 11 views
7

Ich möchte eine Klasse ContextItem als Erweiterung der Java-Klasse Predicate mit einem Merkmal Confidence definieren.Java-Klasse mit Scala-Eigenschaft erweitern

Vertrauen ist eine einfache Eigenschaft, die einfach ein Vertrauensfeld zu dem hinzufügt, was auch immer es ausdehnt.

trait Confidence{ 
    def confidence:Double 
} 

ich meine ContextItem Klasse bin definieren, indem Sie einfach unter Angabe:

class ContextItem extends Predicate with Confidence{} 

aber versuchen, diese Erträge zu kompilieren ...

com/slug/berds/Berds.scala:11: error: overloaded method constructor Predicate with  alternatives: 
    (java.lang.String,<repeated...>[java.lang.String])com.Predicate <and> 
    (java.lang.String,<repeated...>[com.Symbol])com.Predicate <and> 
    (java.lang.String,java.util.ArrayList[com.Symbol])com.Predicate <and> 
    (com.Predicate)com.Predicate <and> 
    (com.Term)com.Predicate <and> 
    (java.lang.String)com.Predicate 
cannot be applied to() 
class ContextItem(pred:Predicate) extends Predicate with Confidence{ 
      ^

Dies wie ein triviales Beispiel scheint, so, was los ist falsch?

Predicate (die nicht von mir) wie folgt aussieht:

/** Representation of predicate logical form. */ 
public class Predicate extends Term implements Serializable { 
    public Predicate(String n) { 
     super(n); 
    } 
    public Predicate(Term t) { 
     super(t); 
    } 
    public Predicate(Predicate p) { 
     super((Term)p); 
    } 
    public Predicate(String n, ArrayList<Symbol> a) { 
     super(n, a); 
    } 
    public Predicate(String n, Symbol... a) { 
     super(n, a); 
    } 
    public Predicate(String n, String... a) { 
     super(n, a); 
    } 
    @Override 
    public Predicate copy() { 
     return new Predicate(this); 
    } 
} 

Weder Prädikats noch eine ihrer Vorfahren Vertrauen implementiert.

+0

Könnten wir die 'Predicate'-Klasse? Implementiert es die Vertrauensmethode? – Nick

Antwort

6

Ich denke, dass es alle Konstruktoren von Predicate auflistet und Sie darüber informiert, dass Sie keine von ihnen verwenden. Standardmäßig wird ein parameterloser Konstruktor verwendet, der hier nicht existiert. Die Syntax zu nennen, beispielsweise die (String) super-Konstruktor, wäre

class ContextItem extends Predicate("something") with Confidence 

oder

class ContextItem(str: String) extends Predicate(str) with Confidence 

Auch im Moment Ihre def confidence ist eine abstrakte Methode, so wird, bis Sie nicht kompilieren gib ihm eine Definition. Wenn Sie das Merkmal soll ein beschreibbares confidence Feld hinzufügen, dann ist es das, was Sie wollen statt:

var confidence: Double = 0.0