我想定义一个类ContextItem
作为java类Predicate
的扩展,具有一个特性Confidence
。
Confidence是一个简单的trait,它只是给它扩展的任何东西添加一个Confidence字段。
trait Confidence{
def confidence:Double
}
我定义我的ContextItem
类通过简单地声明:
class ContextItem extends Predicate with Confidence{}
但是试图编译这个会产生…
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{
^
这似乎是一个微不足道的例子,那么出了什么问题?
谓词(不是我的)看起来像:
/** 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);
}
}
Predicate和它的祖先都没有实现置信度
我认为它列出了Predicate
的所有构造函数,并通知您没有使用它们中的任何一个。默认是使用无参数构造函数,这里不存在。例如,调用(String)
超级构造函数的语法为
class ContextItem extends Predicate("something") with Confidence
或
class ContextItem(str: String) extends Predicate(str) with Confidence
同时,目前你的def confidence
是一个抽象方法,所以不会编译,直到你给它一个定义。如果你想添加一个可写的confidence
字段,那么这就是你想要的:
var confidence: Double = 0.0