A) Vehicle.getMotor() is defined to return TEngine. Drools can get that TEngine is bound to Engine class, but Engine doesn't have property "adBlueRequired". Hence results in the error. "#" is syntax to specify the sub class.
B) DieselCar.getEngine() is defined to return DieselEngine. So the rule can access "adBlueRequired".
exec-model generates java codes from rules (for faster KiePackage/KieBase build), so those static class information is crucial while non-exec-model can resolve the value at rule execution time.
Add more explanation to https://docs.drools.org/latest/drools-docs/drools/migration-guide/index.html#_generics_return_type_resolution
A) Vehicle.getMotor() is defined to return TEngine. Drools can get that TEngine is bound to Engine class, but Engine doesn't have property "adBlueRequired". Hence results in the error. "#" is syntax to specify the sub class.
B) DieselCar.getEngine() is defined to return DieselEngine. So the rule can access "adBlueRequired".
exec-model generates java codes from rules (for faster KiePackage/KieBase build), so those static class information is crucial while non-exec-model can resolve the value at rule execution time.