A drawback which this has is that it stops you from changing your contract with code which is outside your package. Since you marked your code as global, there could be callers of this code from outside as well that actually relies on the implementation of al.ObjectComparator interface.