2013-04-17 16 views
7

Vorrei definire una classe ContextItem come estensione della classe java Predicate con un tratto Confidence.Estensione di Java Class con Scala Trait

La confidenza è un tratto semplice che aggiunge semplicemente un campo di confidenza a qualsiasi estensione.

trait Confidence{ 
    def confidence:Double 
} 

mi sto definendo mia classe ContextItem semplicemente affermando:

class ContextItem extends Predicate with Confidence{} 

Ma il tentativo di compilare questo rendimenti ...

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{ 
      ^

Questo mi sembra un esempio banale, così che cosa sta succedendo sbagliato?

predicato (che non è mio) si presenta come:

/** 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); 
    } 
} 

Né predicato né alcuno dei suoi antenati implementa fiducia.

+0

Potremmo vedere la classe 'Predicate'? Implementa il metodo 'confidence'? – Nick

risposta

6

Penso che stia elencando tutti i costruttori di Predicate e informandoti che non stai utilizzando nessuno di questi. L'impostazione predefinita è utilizzare un costruttore senza parametri, che non esiste qui. La sintassi per chiamare, ad esempio, il super-costruttore (String), sarebbe

class ContextItem extends Predicate("something") with Confidence 

o

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

Inoltre, in questo momento la tua def confidence è un metodo astratto, in modo da non compilerà finché non si dargli una definizione Se si intende il tratto per aggiungere un campo scrivibile confidence allora questo è ciò che si vuole, invece:

var confidence: Double = 0.0