[SalesForce] Why we are allowed to pass sObject in queueable

I am having a small doubt, and want to have some inputs on that.

For future methods, we are not allowed to have sObjects as method params/arguments. and the reason in documentation is stated as below:

The reason why sObjects can’t be passed as arguments to future methods
is because the sObject might change between the time you call the
method and the time it executes.

However, we are having same feature in queueable. So does that guarantees data integrity?

If yes, how that ensures data is not overridden.

If no, why it is not extended with future only(instead of new framework).

Thanks in advance!

Best Answer

Queueable is a completely different framework from future methods, and it gives a lot of benefits over it. It was probably easier and safer for salesforce to create a new framework/interface, than the modify the existing @future implementation without breaking existing apex code.

Also, it's likely that the reason why future methods can't take sobjects was true at the time of writing the documentation, but obviously no longer accurate as another framework (queueable) is able to handle sobjects.

Long story short, it's probably due to shortcomings of the @future framework + innacurate/outdated documentation.