2013-04-17 45 views
7

Tôi muốn xác định một lớp ContextItem là phần mở rộng của lớp java Predicate với một đặc điểm Confidence.Mở rộng lớp Java với Scala Trait

Tự tin là một đặc điểm đơn giản, chỉ cần thêm trường tin cậy vào bất kỳ trường nào mở rộng.

trait Confidence{ 
    def confidence:Double 
} 

Tôi xác định lớp ContextItem của tôi bằng cách đơn giản nêu:

class ContextItem extends Predicate with Confidence{} 

Nhưng cố gắng để biên dịch lãi suất này ...

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

Điều này có vẻ giống như một ví dụ nhỏ, vì vậy những gì đang diễn ra sai rồi?

Predicate (mà không phải là mỏ) trông giống như:

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

Cả Predicate hay bất kỳ của tổ tiên nó thực hiện sự tự tin.

+0

Chúng ta có thể thấy lớp 'Predicate' không? Nó có thực hiện phương thức 'tự tin' không? – Nick

Trả lời

6

Tôi nghĩ rằng đó là liệt kê tất cả các nhà thầu của Predicate và thông báo cho bạn biết rằng bạn không sử dụng bất kỳ thiết bị nào trong số đó. Mặc định là sử dụng một hàm tạo parameterless không tồn tại ở đây. Cú pháp để gọi, ví dụ, (String) siêu constructor, sẽ

class ContextItem extends Predicate("something") with Confidence 

hoặc

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

Ngoài ra, tại thời điểm hiện tại của bạn def confidence là một phương pháp trừu tượng, như vậy sẽ không biên dịch cho đến khi bạn cho nó một định nghĩa. Nếu bạn dự định đặc điểm để thêm trường confidence có thể ghi thì đây là những gì bạn muốn thay thế:

var confidence: Double = 0.0 
Các vấn đề liên quan