Simplify RemoteExecutionCache

This is in preparation for adding an additional cache to RemoteExecutionCache
to deduplicate file uploads.

Progress on #12113.

Change-Id: I3cffc5acc0bfb1b26e908f8edf44e30a4be0db86

Closes #12114.

Change-Id: I3cffc5acc0bfb1b26e908f8edf44e30a4be0db86
PiperOrigin-RevId: 332182515
diff --git a/src/main/java/com/google/devtools/build/lib/remote/RemoteCache.java b/src/main/java/com/google/devtools/build/lib/remote/RemoteCache.java
index 6a0b501..2d66369 100644
--- a/src/main/java/com/google/devtools/build/lib/remote/RemoteCache.java
+++ b/src/main/java/com/google/devtools/build/lib/remote/RemoteCache.java
@@ -206,13 +206,13 @@
     }
   }
 
-  public static <T> void waitForBulkTransfer(
-      Iterable<ListenableFuture<T>> transfers, boolean cancelRemainingOnInterrupt)
+  public static void waitForBulkTransfer(
+      Iterable<? extends ListenableFuture<?>> transfers, boolean cancelRemainingOnInterrupt)
       throws BulkTransferException, InterruptedException {
     BulkTransferException bulkTransferException = null;
     InterruptedException interruptedException = null;
     boolean interrupted = Thread.currentThread().isInterrupted();
-    for (ListenableFuture<T> transfer : transfers) {
+    for (ListenableFuture<?> transfer : transfers) {
       try {
         if (interruptedException == null) {
           // Wait for all transfers to finish.