2013-10-13 31 views
1

下面是我的課的結構:我使用Drools的規則表達式:訪問嵌套類的數據成員

public class Address { 
       private String street; 
     private int phone; 
     public void setStreet(String s){street = s;} 
     public void setPhone(int p){phone = p;} 
     public String getStreet(String s){return street;} 
     public int getPhone(){ return phone; } 
} 
public class Borrower { 
    Address adr = new Address(); 
    public void setAddress(String s, int p) { 
     adr.setStreet(s); 
     adr.setPhone(p); 
    } 
    public Address getAddress() { return adr; } 
} 

Drools的表達: -

rule "Nested Address" 
    salience -10  
    when 
     $bo : Borrower(Address.street.equals("USA") && Address.phone != 717) 
     $loanApp : LoanApplication()   
    then 
     $loanApp.addFeedbackMessage(FeedbackMessages.LOCATION_NOT_US); 
     System.out.println("Nested Address " + $bo.adr.street + ", Nested Phone " + $bo.adr.phone); 
end 

上面給我的錯誤:

Unable to Analyse Expression Address.street.equals("USA"): 

有人可以告訴我我做錯了什麼嗎?

+0

任何特別的原因( 「USA」 )'而不是'==「USA」'? –

回答

3

你應該使用屬性名稱「地址」(注意小寫字母a)而不是類地址。所以:

rule "Nested Address" 
    salience -10  
    when 
     $bo : Borrower(address.street.equals("USA") && address.phone != 717) 
     $loanApp : LoanApplication()   
    then 
     $loanApp.addFeedbackMessage(FeedbackMessages.LOCATION_NOT_US); 
     System.out.println("Nested Address " + $bo.adr.street + ", Nested Phone " + $bo.adr.phone); 
end 
1

您應該使用 「ADR」(屬性名稱),而不是 「地址」(類名):爲什麼你使用`.equals

rule "Nested Address" 
    salience -10  
    when 
     $bo : Borrower(adr.street.equals("USA") && adr.phone != 717) 
     $loanApp : LoanApplication()   
    then 
     $loanApp.addFeedbackMessage(FeedbackMessages.LOCATION_NOT_US); 
     System.out.println("Nested Address " + $bo.adr.street + ", Nested Phone " + $bo.adr.phone); 
end