使用Scala Trait扩展Java类

wil*_*ome 7 java inheritance scala traits

我想将一个类定义ContextItemPredicate具有特征的java类的扩展Confidence.

信心是一个简单的特征,它只是为其扩展的内容添加一个置信区域.

trait Confidence{
  def confidence:Double
}
Run Code Online (Sandbox Code Playgroud)

ContextItem只是通过陈述来定义我的课程:

class ContextItem extends Predicate with Confidence{}
Run Code Online (Sandbox Code Playgroud)

但是试图编译它会产生......

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{
             ^
Run Code Online (Sandbox Code Playgroud)

这似乎是一个微不足道的例子,所以出了什么问题?

谓词(不是我的)看起来像:

/** 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

谓词或其任何祖先都没有实现信心.

Nic*_*ick 6

我认为它列出了所有构造函数Predicate,并通知您没有使用它们中的任何一个.默认设置是使用无参数构造函数,此处不存在.调用的语法,例如,(String)超级构造函数,将是

class ContextItem extends Predicate("something") with Confidence
Run Code Online (Sandbox Code Playgroud)

要么

class ContextItem(str: String) extends Predicate(str) with Confidence
Run Code Online (Sandbox Code Playgroud)

此外,目前您def confidence是一个抽象方法,因此在您给它定义之前不会编译.如果您希望特征添加可写confidence字段,那么这就是您想要的:

var confidence: Double = 0.0
Run Code Online (Sandbox Code Playgroud)