This week's book giveaway is in the OO, Patterns, UML and Refactoring forum. We're giving away four copies of Refactoring for Software Design Smells: Managing Technical Debt and have Girish Suryanarayana, Ganesh Samarthyam & Tushar Sharma on-line! See this thread for details.
The problem is that Task's generic type is <T extends TaskResult<T>>. BigDecimalResult does not implement TaskResult<BigDecimalResult> but TaskResult<BigDecimal>. If you change the declaration to "interface Task<T extends TaskResult<?>>" it will compile. Another option is to use two generic types:
This does make it messy, and you only need it if you need the T of TaskResult.