> the usual time vs. space tradeoff, I guess ;-)

Actually, if we make eTag `final` we can skip the `uploaded` field, since the compiler should be able to turn `eTag != null` in `isUploaded()` into a constant expression.