code: public <T extends AbstractPutObjectRequest> T withBucketName(
              String bucketName) {
          setBucketName(bucketName);
          @SuppressWarnings("unchecked") T t = (T)this;
          return t;
      }
docs: Sets the name of the bucket where this request will upload a new
  object to. Returns this object, enabling additional method calls to be
  chained together.
  <p>
  In order to upload the object,
  users must have {@link Permission#Write} permission granted.
  
  @param bucketName
  The name of an existing bucket where this request will
  upload a new object to.
  In order to upload the object,
  users must have {@link Permission#Write} permission granted.
  
  @return This {@link AbstractPutObjectRequest}, enabling additional method calls to be
  chained together.
  
  @see AbstractPutObjectRequest#getBucketName()
  @see AbstractPutObjectRequest#setBucketName(String)