2016-03-02 93 views
1

我有一個父類Vehicle()在drools xls文件中傳遞如何訪問子類Car()的屬性?在drools中從父類訪問子類屬性

我試過鑄造,但它流口水不識別方法從OP的評論投

(Car.cast(vehicle)).isManual() 

編輯由勞瑞懶懶:我使用 Drools的版本是4.0.7

import workspace.sampleproj.domain.* 
function boolean checkIfCarManual(Vehicle vehicle){ 
    if (vehicle.isCar() == true){ 
     if((Car.cast(vehicle).isManual() == true){ 
      return true; 
     } else { 
      return false; 
     } 
    } else { 
     return false; 
    } 
} 
+0

你能告訴您在何處使用上下文這個? LHS - RHS - ? – laune

+0

嗨,我用這個函數調用 – SpongebobJunior

+1

什麼?哪裏? - 你當然需要擠壓才能讓果汁流淌...... ;-) – laune

回答

1

Drools無法識別無法識別的內容。

如果您的課Car有一個靜態方法cast(Vehicle v),它應該被識別。 (如果沒有這樣的方法,你會得到一個錯誤。)

class Car extends Vehicle { 
    public static Car cast(Vehicle v){ return (Car)v; } 
    ... 
} 

也許你試着使用的java.lang.Classcast方法?如果是這樣,你必須寫

(Car.class.cast(vehicle)).isManual() 

後來而且也沒有理由你不應該能夠使用一個簡單的轉換:

function boolean checkIfCarManual(Vehicle vehicle){ 
    return vehicle.isCar() && ((Car)vehicle).isManual(); 
} 
+0

嗨勞恩,對不起,我不太熟悉口水,所以我不能清楚地解釋我自己。是的,我使用java.lang.Class,但drools無法識別它。不幸的是,我只能改變drools xls而不是汽車域名。還有其他方法只在xls中做到這一點嗎?謝謝 – SpongebobJunior

+0

那麼,在嘗試調用'java.lang.Class'的'cast'方法時,你真的*寫了什麼?你是如何在xls中使用它的?哪個Drools版本?你讀過我的答案嗎? – laune

+0

道歉,這是我試圖實現的功能,基本上它會檢查車輛目標是否是汽車,以及是否是手動變速箱。我使用的drools版本是4.0.7。不幸的是,我不能使用你的答案,因爲我只能改變xls而不是域。 '進口workspace.sampleproj.domain。* 功能布爾checkIfCarManual(車車){ \t如果(vehicle.isCar()==真){ \t \t如果((Car.cast(車輛).isManual ()==真){ \t \t \t迴歸真實; \t \t} \t \t其他{ \t \t \t返回FALSE; \t \t} \t} else { \t return false; \t} }' – SpongebobJunior