DO NOT MERGE Update 24.txt to include type variables.

(cherry picked from commit 3ff811fe18c32f1c1b5033ef9f09d07f46b3156c)

Bug: 24265043
Change-Id: I1b37959aa3dde09b1efa7771876106137e43ed18
diff --git a/api/24.txt b/api/24.txt
index 3bd607b..3b03007 100644
--- a/api/24.txt
+++ b/api/24.txt
@@ -2897,11 +2897,11 @@
     field public static final java.lang.String LOGIN_ACCOUNTS_CHANGED_ACTION = "android.accounts.LOGIN_ACCOUNTS_CHANGED";
   }
 
-  public abstract interface AccountManagerCallback {
+  public abstract interface AccountManagerCallback<V> {
     method public abstract void run(android.accounts.AccountManagerFuture<V>);
   }
 
-  public abstract interface AccountManagerFuture {
+  public abstract interface AccountManagerFuture<V> {
     method public abstract boolean cancel(boolean);
     method public abstract V getResult() throws android.accounts.AuthenticatorException, java.io.IOException, android.accounts.OperationCanceledException;
     method public abstract V getResult(long, java.util.concurrent.TimeUnit) throws android.accounts.AuthenticatorException, java.io.IOException, android.accounts.OperationCanceledException;
@@ -3047,7 +3047,7 @@
     method public java.lang.Object evaluate(float, java.lang.Object, java.lang.Object);
   }
 
-  public abstract class BidirectionalTypeConverter extends android.animation.TypeConverter {
+  public abstract class BidirectionalTypeConverter<T, V> extends android.animation.TypeConverter {
     ctor public BidirectionalTypeConverter(java.lang.Class<T>, java.lang.Class<V>);
     method public abstract T convertBack(V);
     method public android.animation.BidirectionalTypeConverter<V, T> invert();
@@ -3139,26 +3139,26 @@
     method public java.lang.String getPropertyName();
     method public java.lang.Object getTarget();
     method public static android.animation.ObjectAnimator ofArgb(java.lang.Object, java.lang.String, int...);
-    method public static android.animation.ObjectAnimator ofArgb(T, android.util.Property<T, java.lang.Integer>, int...);
+    method public static <T> android.animation.ObjectAnimator ofArgb(T, android.util.Property<T, java.lang.Integer>, int...);
     method public static android.animation.ObjectAnimator ofFloat(java.lang.Object, java.lang.String, float...);
     method public static android.animation.ObjectAnimator ofFloat(java.lang.Object, java.lang.String, java.lang.String, android.graphics.Path);
-    method public static android.animation.ObjectAnimator ofFloat(T, android.util.Property<T, java.lang.Float>, float...);
-    method public static android.animation.ObjectAnimator ofFloat(T, android.util.Property<T, java.lang.Float>, android.util.Property<T, java.lang.Float>, android.graphics.Path);
+    method public static <T> android.animation.ObjectAnimator ofFloat(T, android.util.Property<T, java.lang.Float>, float...);
+    method public static <T> android.animation.ObjectAnimator ofFloat(T, android.util.Property<T, java.lang.Float>, android.util.Property<T, java.lang.Float>, android.graphics.Path);
     method public static android.animation.ObjectAnimator ofInt(java.lang.Object, java.lang.String, int...);
     method public static android.animation.ObjectAnimator ofInt(java.lang.Object, java.lang.String, java.lang.String, android.graphics.Path);
-    method public static android.animation.ObjectAnimator ofInt(T, android.util.Property<T, java.lang.Integer>, int...);
-    method public static android.animation.ObjectAnimator ofInt(T, android.util.Property<T, java.lang.Integer>, android.util.Property<T, java.lang.Integer>, android.graphics.Path);
+    method public static <T> android.animation.ObjectAnimator ofInt(T, android.util.Property<T, java.lang.Integer>, int...);
+    method public static <T> android.animation.ObjectAnimator ofInt(T, android.util.Property<T, java.lang.Integer>, android.util.Property<T, java.lang.Integer>, android.graphics.Path);
     method public static android.animation.ObjectAnimator ofMultiFloat(java.lang.Object, java.lang.String, float[][]);
     method public static android.animation.ObjectAnimator ofMultiFloat(java.lang.Object, java.lang.String, android.graphics.Path);
-    method public static android.animation.ObjectAnimator ofMultiFloat(java.lang.Object, java.lang.String, android.animation.TypeConverter<T, float[]>, android.animation.TypeEvaluator<T>, T...);
+    method public static <T> android.animation.ObjectAnimator ofMultiFloat(java.lang.Object, java.lang.String, android.animation.TypeConverter<T, float[]>, android.animation.TypeEvaluator<T>, T...);
     method public static android.animation.ObjectAnimator ofMultiInt(java.lang.Object, java.lang.String, int[][]);
     method public static android.animation.ObjectAnimator ofMultiInt(java.lang.Object, java.lang.String, android.graphics.Path);
-    method public static android.animation.ObjectAnimator ofMultiInt(java.lang.Object, java.lang.String, android.animation.TypeConverter<T, int[]>, android.animation.TypeEvaluator<T>, T...);
+    method public static <T> android.animation.ObjectAnimator ofMultiInt(java.lang.Object, java.lang.String, android.animation.TypeConverter<T, int[]>, android.animation.TypeEvaluator<T>, T...);
     method public static android.animation.ObjectAnimator ofObject(java.lang.Object, java.lang.String, android.animation.TypeEvaluator, java.lang.Object...);
     method public static android.animation.ObjectAnimator ofObject(java.lang.Object, java.lang.String, android.animation.TypeConverter<android.graphics.PointF, ?>, android.graphics.Path);
-    method public static android.animation.ObjectAnimator ofObject(T, android.util.Property<T, V>, android.animation.TypeEvaluator<V>, V...);
-    method public static android.animation.ObjectAnimator ofObject(T, android.util.Property<T, P>, android.animation.TypeConverter<V, P>, android.animation.TypeEvaluator<V>, V...);
-    method public static android.animation.ObjectAnimator ofObject(T, android.util.Property<T, V>, android.animation.TypeConverter<android.graphics.PointF, V>, android.graphics.Path);
+    method public static <T, V> android.animation.ObjectAnimator ofObject(T, android.util.Property<T, V>, android.animation.TypeEvaluator<V>, V...);
+    method public static <T, V, P> android.animation.ObjectAnimator ofObject(T, android.util.Property<T, P>, android.animation.TypeConverter<V, P>, android.animation.TypeEvaluator<V>, V...);
+    method public static <T, V> android.animation.ObjectAnimator ofObject(T, android.util.Property<T, V>, android.animation.TypeConverter<android.graphics.PointF, V>, android.graphics.Path);
     method public static android.animation.ObjectAnimator ofPropertyValuesHolder(java.lang.Object, android.animation.PropertyValuesHolder...);
     method public void setAutoCancel(boolean);
     method public void setProperty(android.util.Property);
@@ -3182,17 +3182,17 @@
     method public static android.animation.PropertyValuesHolder ofKeyframe(android.util.Property, android.animation.Keyframe...);
     method public static android.animation.PropertyValuesHolder ofMultiFloat(java.lang.String, float[][]);
     method public static android.animation.PropertyValuesHolder ofMultiFloat(java.lang.String, android.graphics.Path);
-    method public static android.animation.PropertyValuesHolder ofMultiFloat(java.lang.String, android.animation.TypeConverter<V, float[]>, android.animation.TypeEvaluator<V>, V...);
-    method public static android.animation.PropertyValuesHolder ofMultiFloat(java.lang.String, android.animation.TypeConverter<T, float[]>, android.animation.TypeEvaluator<T>, android.animation.Keyframe...);
+    method public static <V> android.animation.PropertyValuesHolder ofMultiFloat(java.lang.String, android.animation.TypeConverter<V, float[]>, android.animation.TypeEvaluator<V>, V...);
+    method public static <T> android.animation.PropertyValuesHolder ofMultiFloat(java.lang.String, android.animation.TypeConverter<T, float[]>, android.animation.TypeEvaluator<T>, android.animation.Keyframe...);
     method public static android.animation.PropertyValuesHolder ofMultiInt(java.lang.String, int[][]);
     method public static android.animation.PropertyValuesHolder ofMultiInt(java.lang.String, android.graphics.Path);
-    method public static android.animation.PropertyValuesHolder ofMultiInt(java.lang.String, android.animation.TypeConverter<V, int[]>, android.animation.TypeEvaluator<V>, V...);
-    method public static android.animation.PropertyValuesHolder ofMultiInt(java.lang.String, android.animation.TypeConverter<T, int[]>, android.animation.TypeEvaluator<T>, android.animation.Keyframe...);
+    method public static <V> android.animation.PropertyValuesHolder ofMultiInt(java.lang.String, android.animation.TypeConverter<V, int[]>, android.animation.TypeEvaluator<V>, V...);
+    method public static <T> android.animation.PropertyValuesHolder ofMultiInt(java.lang.String, android.animation.TypeConverter<T, int[]>, android.animation.TypeEvaluator<T>, android.animation.Keyframe...);
     method public static android.animation.PropertyValuesHolder ofObject(java.lang.String, android.animation.TypeEvaluator, java.lang.Object...);
     method public static android.animation.PropertyValuesHolder ofObject(java.lang.String, android.animation.TypeConverter<android.graphics.PointF, ?>, android.graphics.Path);
-    method public static android.animation.PropertyValuesHolder ofObject(android.util.Property, android.animation.TypeEvaluator<V>, V...);
-    method public static android.animation.PropertyValuesHolder ofObject(android.util.Property<?, V>, android.animation.TypeConverter<T, V>, android.animation.TypeEvaluator<T>, T...);
-    method public static android.animation.PropertyValuesHolder ofObject(android.util.Property<?, V>, android.animation.TypeConverter<android.graphics.PointF, V>, android.graphics.Path);
+    method public static <V> android.animation.PropertyValuesHolder ofObject(android.util.Property, android.animation.TypeEvaluator<V>, V...);
+    method public static <T, V> android.animation.PropertyValuesHolder ofObject(android.util.Property<?, V>, android.animation.TypeConverter<T, V>, android.animation.TypeEvaluator<T>, T...);
+    method public static <V> android.animation.PropertyValuesHolder ofObject(android.util.Property<?, V>, android.animation.TypeConverter<android.graphics.PointF, V>, android.graphics.Path);
     method public void setConverter(android.animation.TypeConverter);
     method public void setEvaluator(android.animation.TypeEvaluator);
     method public void setFloatValues(float...);
@@ -3229,12 +3229,12 @@
     method public abstract float getInterpolation(float);
   }
 
-  public abstract class TypeConverter {
+  public abstract class TypeConverter<T, V> {
     ctor public TypeConverter(java.lang.Class<T>, java.lang.Class<V>);
     method public abstract V convert(T);
   }
 
-  public abstract interface TypeEvaluator {
+  public abstract interface TypeEvaluator<T> {
     method public abstract T evaluate(float, T, T);
   }
 
@@ -4561,7 +4561,7 @@
     method public android.os.Parcelable saveAllState();
   }
 
-  public abstract class FragmentHostCallback extends android.app.FragmentContainer {
+  public abstract class FragmentHostCallback<E> extends android.app.FragmentContainer {
     ctor public FragmentHostCallback(android.content.Context, android.os.Handler, int);
     method public void onAttachFragment(android.app.Fragment);
     method public void onDump(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
@@ -4828,12 +4828,12 @@
     method public abstract void destroyLoader(int);
     method public abstract void dump(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
     method public static void enableDebugLogging(boolean);
-    method public abstract android.content.Loader<D> getLoader(int);
-    method public abstract android.content.Loader<D> initLoader(int, android.os.Bundle, android.app.LoaderManager.LoaderCallbacks<D>);
-    method public abstract android.content.Loader<D> restartLoader(int, android.os.Bundle, android.app.LoaderManager.LoaderCallbacks<D>);
+    method public abstract <D> android.content.Loader<D> getLoader(int);
+    method public abstract <D> android.content.Loader<D> initLoader(int, android.os.Bundle, android.app.LoaderManager.LoaderCallbacks<D>);
+    method public abstract <D> android.content.Loader<D> restartLoader(int, android.os.Bundle, android.app.LoaderManager.LoaderCallbacks<D>);
   }
 
-  public static abstract interface LoaderManager.LoaderCallbacks {
+  public static abstract interface LoaderManager.LoaderCallbacks<D> {
     method public abstract android.content.Loader<D> onCreateLoader(int, android.os.Bundle);
     method public abstract void onLoadFinished(android.content.Loader<D>, D);
     method public abstract void onLoaderReset(android.content.Loader<D>);
@@ -7612,7 +7612,7 @@
     ctor public AsyncQueryHandler.WorkerHandler(android.os.Looper);
   }
 
-  public abstract class AsyncTaskLoader extends android.content.Loader {
+  public abstract class AsyncTaskLoader<D> extends android.content.Loader {
     ctor public AsyncTaskLoader(android.content.Context);
     method public void cancelLoadInBackground();
     method public boolean isLoadInBackgroundCanceled();
@@ -7794,7 +7794,7 @@
     method public android.os.ParcelFileDescriptor openFile(android.net.Uri, java.lang.String) throws java.io.FileNotFoundException;
     method public android.os.ParcelFileDescriptor openFile(android.net.Uri, java.lang.String, android.os.CancellationSignal) throws java.io.FileNotFoundException;
     method protected final android.os.ParcelFileDescriptor openFileHelper(android.net.Uri, java.lang.String) throws java.io.FileNotFoundException;
-    method public android.os.ParcelFileDescriptor openPipeHelper(android.net.Uri, java.lang.String, android.os.Bundle, T, android.content.ContentProvider.PipeDataWriter<T>) throws java.io.FileNotFoundException;
+    method public <T> android.os.ParcelFileDescriptor openPipeHelper(android.net.Uri, java.lang.String, android.os.Bundle, T, android.content.ContentProvider.PipeDataWriter<T>) throws java.io.FileNotFoundException;
     method public android.content.res.AssetFileDescriptor openTypedAssetFile(android.net.Uri, java.lang.String, android.os.Bundle) throws java.io.FileNotFoundException;
     method public android.content.res.AssetFileDescriptor openTypedAssetFile(android.net.Uri, java.lang.String, android.os.Bundle, android.os.CancellationSignal) throws java.io.FileNotFoundException;
     method public abstract android.database.Cursor query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String);
@@ -7807,7 +7807,7 @@
     method public abstract int update(android.net.Uri, android.content.ContentValues, java.lang.String, java.lang.String[]);
   }
 
-  public static abstract interface ContentProvider.PipeDataWriter {
+  public static abstract interface ContentProvider.PipeDataWriter<T> {
     method public abstract void writeDataToPipe(android.os.ParcelFileDescriptor, android.net.Uri, java.lang.String, android.os.Bundle, T);
   }
 
@@ -8078,7 +8078,7 @@
     method public final java.lang.String getString(int);
     method public final java.lang.String getString(int, java.lang.Object...);
     method public abstract java.lang.Object getSystemService(java.lang.String);
-    method public final T getSystemService(java.lang.Class<T>);
+    method public final <T> T getSystemService(java.lang.Class<T>);
     method public abstract java.lang.String getSystemServiceName(java.lang.Class<?>);
     method public final java.lang.CharSequence getText(int);
     method public abstract android.content.res.Resources.Theme getTheme();
@@ -8432,8 +8432,8 @@
     method public long getLongExtra(java.lang.String, long);
     method public java.lang.String getPackage();
     method public android.os.Parcelable[] getParcelableArrayExtra(java.lang.String);
-    method public java.util.ArrayList<T> getParcelableArrayListExtra(java.lang.String);
-    method public T getParcelableExtra(java.lang.String);
+    method public <T extends android.os.Parcelable> java.util.ArrayList<T> getParcelableArrayListExtra(java.lang.String);
+    method public <T extends android.os.Parcelable> T getParcelableExtra(java.lang.String);
     method public java.lang.String getScheme();
     method public android.content.Intent getSelector();
     method public java.io.Serializable getSerializableExtra(java.lang.String);
@@ -8908,7 +8908,7 @@
     ctor public IntentSender.SendIntentException(java.lang.Exception);
   }
 
-  public class Loader {
+  public class Loader<D> {
     ctor public Loader(android.content.Context);
     method public void abandon();
     method public boolean cancelLoad();
@@ -8945,11 +8945,11 @@
     ctor public Loader.ForceLoadContentObserver();
   }
 
-  public static abstract interface Loader.OnLoadCanceledListener {
+  public static abstract interface Loader.OnLoadCanceledListener<D> {
     method public abstract void onLoadCanceled(android.content.Loader<D>);
   }
 
-  public static abstract interface Loader.OnLoadCompleteListener {
+  public static abstract interface Loader.OnLoadCompleteListener<D> {
     method public abstract void onLoadComplete(android.content.Loader<D>, D);
   }
 
@@ -10740,7 +10740,7 @@
     method public boolean isNull(int);
   }
 
-  public abstract class Observable {
+  public abstract class Observable<T> {
     ctor public Observable();
     method public void registerObserver(T);
     method public void unregisterAll();
@@ -12630,7 +12630,7 @@
   public class AnimatedStateListDrawable extends android.graphics.drawable.StateListDrawable {
     ctor public AnimatedStateListDrawable();
     method public void addState(int[], android.graphics.drawable.Drawable, int);
-    method public void addTransition(int, int, T, boolean);
+    method public <T extends android.graphics.drawable.Drawable & android.graphics.drawable.Animatable> void addTransition(int, int, T, boolean);
   }
 
   public class AnimatedVectorDrawable extends android.graphics.drawable.Drawable implements android.graphics.drawable.Animatable2 {
@@ -13754,7 +13754,7 @@
   }
 
   public final class CameraCharacteristics extends android.hardware.camera2.CameraMetadata {
-    method public T get(android.hardware.camera2.CameraCharacteristics.Key<T>);
+    method public <T> T get(android.hardware.camera2.CameraCharacteristics.Key<T>);
     method public java.util.List<android.hardware.camera2.CaptureRequest.Key<?>> getAvailableCaptureRequestKeys();
     method public java.util.List<android.hardware.camera2.CaptureResult.Key<?>> getAvailableCaptureResultKeys();
     field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES;
@@ -13839,7 +13839,7 @@
     field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> TONEMAP_MAX_CURVE_POINTS;
   }
 
-  public static final class CameraCharacteristics.Key {
+  public static final class CameraCharacteristics.Key<T> {
     method public final boolean equals(java.lang.Object);
     method public java.lang.String getName();
     method public final int hashCode();
@@ -13904,7 +13904,7 @@
     method public void onTorchModeUnavailable(java.lang.String);
   }
 
-  public abstract class CameraMetadata {
+  public abstract class CameraMetadata<TKey> {
     method public java.util.List<TKey> getKeys();
     field public static final int COLOR_CORRECTION_ABERRATION_MODE_FAST = 1; // 0x1
     field public static final int COLOR_CORRECTION_ABERRATION_MODE_HIGH_QUALITY = 2; // 0x2
@@ -14112,7 +14112,7 @@
 
   public final class CaptureRequest extends android.hardware.camera2.CameraMetadata implements android.os.Parcelable {
     method public int describeContents();
-    method public T get(android.hardware.camera2.CaptureRequest.Key<T>);
+    method public <T> T get(android.hardware.camera2.CaptureRequest.Key<T>);
     method public java.lang.Object getTag();
     method public boolean isReprocess();
     method public void writeToParcel(android.os.Parcel, int);
@@ -14175,20 +14175,20 @@
   public static final class CaptureRequest.Builder {
     method public void addTarget(android.view.Surface);
     method public android.hardware.camera2.CaptureRequest build();
-    method public T get(android.hardware.camera2.CaptureRequest.Key<T>);
+    method public <T> T get(android.hardware.camera2.CaptureRequest.Key<T>);
     method public void removeTarget(android.view.Surface);
-    method public void set(android.hardware.camera2.CaptureRequest.Key<T>, T);
+    method public <T> void set(android.hardware.camera2.CaptureRequest.Key<T>, T);
     method public void setTag(java.lang.Object);
   }
 
-  public static final class CaptureRequest.Key {
+  public static final class CaptureRequest.Key<T> {
     method public final boolean equals(java.lang.Object);
     method public java.lang.String getName();
     method public final int hashCode();
   }
 
   public class CaptureResult extends android.hardware.camera2.CameraMetadata {
-    method public T get(android.hardware.camera2.CaptureResult.Key<T>);
+    method public <T> T get(android.hardware.camera2.CaptureResult.Key<T>);
     method public long getFrameNumber();
     method public android.hardware.camera2.CaptureRequest getRequest();
     method public int getSequenceId();
@@ -14269,7 +14269,7 @@
     field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> TONEMAP_PRESET_CURVE;
   }
 
-  public static final class CaptureResult.Key {
+  public static final class CaptureResult.Key<T> {
     method public final boolean equals(java.lang.Object);
     method public java.lang.String getName();
     method public final int hashCode();
@@ -14394,14 +14394,14 @@
     method public android.util.Size[] getInputSizes(int);
     method public final int[] getOutputFormats();
     method public long getOutputMinFrameDuration(int, android.util.Size);
-    method public long getOutputMinFrameDuration(java.lang.Class<T>, android.util.Size);
-    method public android.util.Size[] getOutputSizes(java.lang.Class<T>);
+    method public <T> long getOutputMinFrameDuration(java.lang.Class<T>, android.util.Size);
+    method public <T> android.util.Size[] getOutputSizes(java.lang.Class<T>);
     method public android.util.Size[] getOutputSizes(int);
     method public long getOutputStallDuration(int, android.util.Size);
-    method public long getOutputStallDuration(java.lang.Class<T>, android.util.Size);
+    method public <T> long getOutputStallDuration(java.lang.Class<T>, android.util.Size);
     method public final int[] getValidOutputFormatsForInput(int);
     method public boolean isOutputSupportedFor(int);
-    method public static boolean isOutputSupportedFor(java.lang.Class<T>);
+    method public static <T> boolean isOutputSupportedFor(java.lang.Class<T>);
     method public boolean isOutputSupportedFor(android.view.Surface);
   }
 
@@ -16102,7 +16102,7 @@
 
 package android.icu.text {
 
-  public final class AlphabeticIndex implements java.lang.Iterable {
+  public final class AlphabeticIndex<V> implements java.lang.Iterable {
     ctor public AlphabeticIndex(android.icu.util.ULocale);
     ctor public AlphabeticIndex(java.util.Locale);
     ctor public AlphabeticIndex(android.icu.text.RuleBasedCollator);
@@ -16128,7 +16128,7 @@
     method public android.icu.text.AlphabeticIndex<V> setUnderflowLabel(java.lang.String);
   }
 
-  public static class AlphabeticIndex.Bucket implements java.lang.Iterable {
+  public static class AlphabeticIndex.Bucket<V> implements java.lang.Iterable {
     method public java.lang.String getLabel();
     method public android.icu.text.AlphabeticIndex.Bucket.LabelType getLabelType();
     method public java.util.Iterator<android.icu.text.AlphabeticIndex.Record<V>> iterator();
@@ -16144,14 +16144,14 @@
     enum_constant public static final android.icu.text.AlphabeticIndex.Bucket.LabelType UNDERFLOW;
   }
 
-  public static final class AlphabeticIndex.ImmutableIndex implements java.lang.Iterable {
+  public static final class AlphabeticIndex.ImmutableIndex<V> implements java.lang.Iterable {
     method public android.icu.text.AlphabeticIndex.Bucket<V> getBucket(int);
     method public int getBucketCount();
     method public int getBucketIndex(java.lang.CharSequence);
     method public java.util.Iterator<android.icu.text.AlphabeticIndex.Bucket<V>> iterator();
   }
 
-  public static class AlphabeticIndex.Record {
+  public static class AlphabeticIndex.Record<V> {
     method public V getData();
     method public java.lang.CharSequence getName();
   }
@@ -17664,8 +17664,8 @@
     method public final android.icu.text.UnicodeSet addAll(java.lang.CharSequence);
     method public android.icu.text.UnicodeSet addAll(android.icu.text.UnicodeSet);
     method public android.icu.text.UnicodeSet addAll(java.lang.Iterable<?>);
-    method public android.icu.text.UnicodeSet addAll(T...);
-    method public T addAllTo(T);
+    method public <T extends java.lang.CharSequence> android.icu.text.UnicodeSet addAll(T...);
+    method public <T extends java.util.Collection<java.lang.String>> T addAllTo(T);
     method public void addMatchSetTo(android.icu.text.UnicodeSet);
     method public android.icu.text.UnicodeSet applyIntPropertyValue(int, int);
     method public final android.icu.text.UnicodeSet applyPattern(java.lang.String);
@@ -17693,15 +17693,15 @@
     method public final boolean contains(java.lang.CharSequence);
     method public boolean containsAll(android.icu.text.UnicodeSet);
     method public boolean containsAll(java.lang.String);
-    method public boolean containsAll(java.lang.Iterable<T>);
+    method public <T extends java.lang.CharSequence> boolean containsAll(java.lang.Iterable<T>);
     method public boolean containsNone(int, int);
     method public boolean containsNone(android.icu.text.UnicodeSet);
     method public boolean containsNone(java.lang.CharSequence);
-    method public boolean containsNone(java.lang.Iterable<T>);
+    method public <T extends java.lang.CharSequence> boolean containsNone(java.lang.Iterable<T>);
     method public final boolean containsSome(int, int);
     method public final boolean containsSome(android.icu.text.UnicodeSet);
     method public final boolean containsSome(java.lang.CharSequence);
-    method public final boolean containsSome(java.lang.Iterable<T>);
+    method public final <T extends java.lang.CharSequence> boolean containsSome(java.lang.Iterable<T>);
     method public android.icu.text.UnicodeSet freeze();
     method public static android.icu.text.UnicodeSet from(java.lang.CharSequence);
     method public static android.icu.text.UnicodeSet fromAll(java.lang.CharSequence);
@@ -17719,14 +17719,14 @@
     method public final android.icu.text.UnicodeSet remove(java.lang.CharSequence);
     method public final android.icu.text.UnicodeSet removeAll(java.lang.CharSequence);
     method public android.icu.text.UnicodeSet removeAll(android.icu.text.UnicodeSet);
-    method public android.icu.text.UnicodeSet removeAll(java.lang.Iterable<T>);
+    method public <T extends java.lang.CharSequence> android.icu.text.UnicodeSet removeAll(java.lang.Iterable<T>);
     method public final android.icu.text.UnicodeSet removeAllStrings();
     method public android.icu.text.UnicodeSet retain(int, int);
     method public final android.icu.text.UnicodeSet retain(int);
     method public final android.icu.text.UnicodeSet retain(java.lang.CharSequence);
     method public final android.icu.text.UnicodeSet retainAll(java.lang.CharSequence);
     method public android.icu.text.UnicodeSet retainAll(android.icu.text.UnicodeSet);
-    method public android.icu.text.UnicodeSet retainAll(java.lang.Iterable<T>);
+    method public <T extends java.lang.CharSequence> android.icu.text.UnicodeSet retainAll(java.lang.Iterable<T>);
     method public android.icu.text.UnicodeSet set(int, int);
     method public android.icu.text.UnicodeSet set(android.icu.text.UnicodeSet);
     method public int size();
@@ -18136,7 +18136,7 @@
     method public long getToDate();
   }
 
-  public abstract interface Freezable implements java.lang.Cloneable {
+  public abstract interface Freezable<T> implements java.lang.Cloneable {
     method public abstract T cloneAsThawed();
     method public abstract T freeze();
     method public abstract boolean isFrozen();
@@ -18418,7 +18418,7 @@
     field public static final android.icu.util.TimeUnit YEAR;
   }
 
-  public class Output {
+  public class Output<T> {
     ctor public Output();
     ctor public Output(T);
     field public T value;
@@ -28069,7 +28069,7 @@
 
 package android.os {
 
-  public abstract class AsyncTask {
+  public abstract class AsyncTask<Params, Progress, Result> {
     ctor public AsyncTask();
     method public final boolean cancel(boolean);
     method protected abstract Result doInBackground(Params...);
@@ -28295,16 +28295,16 @@
     method public float getFloat(java.lang.String, float);
     method public float[] getFloatArray(java.lang.String);
     method public java.util.ArrayList<java.lang.Integer> getIntegerArrayList(java.lang.String);
-    method public T getParcelable(java.lang.String);
+    method public <T extends android.os.Parcelable> T getParcelable(java.lang.String);
     method public android.os.Parcelable[] getParcelableArray(java.lang.String);
-    method public java.util.ArrayList<T> getParcelableArrayList(java.lang.String);
+    method public <T extends android.os.Parcelable> java.util.ArrayList<T> getParcelableArrayList(java.lang.String);
     method public java.io.Serializable getSerializable(java.lang.String);
     method public short getShort(java.lang.String);
     method public short getShort(java.lang.String, short);
     method public short[] getShortArray(java.lang.String);
     method public android.util.Size getSize(java.lang.String);
     method public android.util.SizeF getSizeF(java.lang.String);
-    method public android.util.SparseArray<T> getSparseParcelableArray(java.lang.String);
+    method public <T extends android.os.Parcelable> android.util.SparseArray<T> getSparseParcelableArray(java.lang.String);
     method public java.util.ArrayList<java.lang.String> getStringArrayList(java.lang.String);
     method public boolean hasFileDescriptors();
     method public void putAll(android.os.Bundle);
@@ -28809,8 +28809,8 @@
     method public final long[] createLongArray();
     method public final java.lang.String[] createStringArray();
     method public final java.util.ArrayList<java.lang.String> createStringArrayList();
-    method public final T[] createTypedArray(android.os.Parcelable.Creator<T>);
-    method public final java.util.ArrayList<T> createTypedArrayList(android.os.Parcelable.Creator<T>);
+    method public final <T> T[] createTypedArray(android.os.Parcelable.Creator<T>);
+    method public final <T> java.util.ArrayList<T> createTypedArrayList(android.os.Parcelable.Creator<T>);
     method public final int dataAvail();
     method public final int dataCapacity();
     method public final int dataPosition();
@@ -28843,7 +28843,7 @@
     method public final long readLong();
     method public final void readLongArray(long[]);
     method public final void readMap(java.util.Map, java.lang.ClassLoader);
-    method public final T readParcelable(java.lang.ClassLoader);
+    method public final <T extends android.os.Parcelable> T readParcelable(java.lang.ClassLoader);
     method public final android.os.Parcelable[] readParcelableArray(java.lang.ClassLoader);
     method public final android.os.PersistableBundle readPersistableBundle();
     method public final android.os.PersistableBundle readPersistableBundle(java.lang.ClassLoader);
@@ -28856,9 +28856,9 @@
     method public final void readStringArray(java.lang.String[]);
     method public final void readStringList(java.util.List<java.lang.String>);
     method public final android.os.IBinder readStrongBinder();
-    method public final void readTypedArray(T[], android.os.Parcelable.Creator<T>);
-    method public final void readTypedList(java.util.List<T>, android.os.Parcelable.Creator<T>);
-    method public final T readTypedObject(android.os.Parcelable.Creator<T>);
+    method public final <T> void readTypedArray(T[], android.os.Parcelable.Creator<T>);
+    method public final <T> void readTypedList(java.util.List<T>, android.os.Parcelable.Creator<T>);
+    method public final <T> T readTypedObject(android.os.Parcelable.Creator<T>);
     method public final java.lang.Object readValue(java.lang.ClassLoader);
     method public final void recycle();
     method public final void setDataCapacity(int);
@@ -28889,7 +28889,7 @@
     method public final void writeMap(java.util.Map);
     method public final void writeNoException();
     method public final void writeParcelable(android.os.Parcelable, int);
-    method public final void writeParcelableArray(T[], int);
+    method public final <T extends android.os.Parcelable> void writeParcelableArray(T[], int);
     method public final void writePersistableBundle(android.os.PersistableBundle);
     method public final void writeSerializable(java.io.Serializable);
     method public final void writeSize(android.util.Size);
@@ -28901,9 +28901,9 @@
     method public final void writeStringList(java.util.List<java.lang.String>);
     method public final void writeStrongBinder(android.os.IBinder);
     method public final void writeStrongInterface(android.os.IInterface);
-    method public final void writeTypedArray(T[], int);
-    method public final void writeTypedList(java.util.List<T>);
-    method public final void writeTypedObject(T, int);
+    method public final <T extends android.os.Parcelable> void writeTypedArray(T[], int);
+    method public final <T extends android.os.Parcelable> void writeTypedList(java.util.List<T>);
+    method public final <T extends android.os.Parcelable> void writeTypedObject(T, int);
     method public final void writeValue(java.lang.Object);
     field public static final android.os.Parcelable.Creator<java.lang.String> STRING_CREATOR;
   }
@@ -28981,11 +28981,11 @@
     field public static final int PARCELABLE_WRITE_RETURN_VALUE = 1; // 0x1
   }
 
-  public static abstract interface Parcelable.ClassLoaderCreator implements android.os.Parcelable.Creator {
+  public static abstract interface Parcelable.ClassLoaderCreator<T> implements android.os.Parcelable.Creator {
     method public abstract T createFromParcel(android.os.Parcel, java.lang.ClassLoader);
   }
 
-  public static abstract interface Parcelable.Creator {
+  public static abstract interface Parcelable.Creator<T> {
     method public abstract T createFromParcel(android.os.Parcel);
     method public abstract T[] newArray(int);
   }
@@ -29099,7 +29099,7 @@
     method public abstract void onProgress(int);
   }
 
-  public class RemoteCallbackList {
+  public class RemoteCallbackList<E extends android.os.IInterface> {
     ctor public RemoteCallbackList();
     method public int beginBroadcast();
     method public void finishBroadcast();
@@ -34409,7 +34409,7 @@
     field public static final java.lang.String SERVICE_INTERFACE = "android.service.carrier.CarrierMessagingService";
   }
 
-  public static abstract interface CarrierMessagingService.ResultCallback {
+  public static abstract interface CarrierMessagingService.ResultCallback<T> {
     method public abstract void onReceiveResult(T) throws android.os.RemoteException;
   }
 
@@ -34560,7 +34560,7 @@
     field public static final java.lang.String EXTRA_SUGGESTED = "android.service.media.extra.SUGGESTED";
   }
 
-  public class MediaBrowserService.Result {
+  public class MediaBrowserService.Result<T> {
     method public void detach();
     method public void sendResult(T);
   }
@@ -37423,14 +37423,14 @@
 
 package android.test {
 
-  public abstract deprecated class ActivityInstrumentationTestCase extends android.test.ActivityTestCase {
+  public abstract deprecated class ActivityInstrumentationTestCase<T extends android.app.Activity> extends android.test.ActivityTestCase {
     ctor public ActivityInstrumentationTestCase(java.lang.String, java.lang.Class<T>);
     ctor public ActivityInstrumentationTestCase(java.lang.String, java.lang.Class<T>, boolean);
     method public T getActivity();
     method public void testActivityTestCaseSetUpProperly() throws java.lang.Exception;
   }
 
-  public abstract deprecated class ActivityInstrumentationTestCase2 extends android.test.ActivityTestCase {
+  public abstract deprecated class ActivityInstrumentationTestCase2<T extends android.app.Activity> extends android.test.ActivityTestCase {
     ctor public deprecated ActivityInstrumentationTestCase2(java.lang.String, java.lang.Class<T>);
     ctor public ActivityInstrumentationTestCase2(java.lang.Class<T>);
     method public T getActivity();
@@ -37445,7 +37445,7 @@
     method protected void setActivity(android.app.Activity);
   }
 
-  public abstract deprecated class ActivityUnitTestCase extends android.test.ActivityTestCase {
+  public abstract deprecated class ActivityUnitTestCase<T extends android.app.Activity> extends android.test.ActivityTestCase {
     ctor public ActivityUnitTestCase(java.lang.Class<T>);
     method public T getActivity();
     method public int getFinishedActivityRequest();
@@ -37491,7 +37491,7 @@
     method public void testStarted(java.lang.String);
   }
 
-  public abstract deprecated class ApplicationTestCase extends android.test.AndroidTestCase {
+  public abstract deprecated class ApplicationTestCase<T extends android.app.Application> extends android.test.AndroidTestCase {
     ctor public ApplicationTestCase(java.lang.Class<T>);
     method protected final void createApplication();
     method public T getApplication();
@@ -37517,8 +37517,8 @@
     method public android.app.Instrumentation getInstrumentation();
     method public deprecated void injectInsrumentation(android.app.Instrumentation);
     method public void injectInstrumentation(android.app.Instrumentation);
-    method public final T launchActivity(java.lang.String, java.lang.Class<T>, android.os.Bundle);
-    method public final T launchActivityWithIntent(java.lang.String, java.lang.Class<T>, android.content.Intent);
+    method public final <T extends android.app.Activity> T launchActivity(java.lang.String, java.lang.Class<T>, android.os.Bundle);
+    method public final <T extends android.app.Activity> T launchActivityWithIntent(java.lang.String, java.lang.Class<T>, android.content.Intent);
     method public void runTestOnUiThread(java.lang.Runnable) throws java.lang.Throwable;
     method public void sendKeys(java.lang.String);
     method public void sendKeys(int...);
@@ -37558,7 +37558,7 @@
 
   public class LoaderTestCase extends android.test.AndroidTestCase {
     ctor public LoaderTestCase();
-    method public T getLoaderResultSynchronously(android.content.Loader<T>);
+    method public <T> T getLoaderResultSynchronously(android.content.Loader<T>);
   }
 
   public final deprecated class MoreAsserts {
@@ -37613,20 +37613,20 @@
     method public abstract void startTiming(boolean);
   }
 
-  public abstract deprecated class ProviderTestCase extends android.test.InstrumentationTestCase {
+  public abstract deprecated class ProviderTestCase<T extends android.content.ContentProvider> extends android.test.InstrumentationTestCase {
     ctor public ProviderTestCase(java.lang.Class<T>, java.lang.String);
     method public android.test.mock.MockContentResolver getMockContentResolver();
     method public android.test.IsolatedContext getMockContext();
     method public T getProvider();
-    method public static android.content.ContentResolver newResolverWithContentProviderFromSql(android.content.Context, java.lang.Class<T>, java.lang.String, java.lang.String, int, java.lang.String) throws java.lang.IllegalAccessException, java.lang.InstantiationException;
+    method public static <T extends android.content.ContentProvider> android.content.ContentResolver newResolverWithContentProviderFromSql(android.content.Context, java.lang.Class<T>, java.lang.String, java.lang.String, int, java.lang.String) throws java.lang.IllegalAccessException, java.lang.InstantiationException;
   }
 
-  public abstract class ProviderTestCase2 extends android.test.AndroidTestCase {
+  public abstract class ProviderTestCase2<T extends android.content.ContentProvider> extends android.test.AndroidTestCase {
     ctor public ProviderTestCase2(java.lang.Class<T>, java.lang.String);
     method public android.test.mock.MockContentResolver getMockContentResolver();
     method public android.test.IsolatedContext getMockContext();
     method public T getProvider();
-    method public static android.content.ContentResolver newResolverWithContentProviderFromSql(android.content.Context, java.lang.String, java.lang.Class<T>, java.lang.String, java.lang.String, int, java.lang.String) throws java.lang.IllegalAccessException, java.lang.InstantiationException;
+    method public static <T extends android.content.ContentProvider> android.content.ContentResolver newResolverWithContentProviderFromSql(android.content.Context, java.lang.String, java.lang.Class<T>, java.lang.String, java.lang.String, int, java.lang.String) throws java.lang.IllegalAccessException, java.lang.InstantiationException;
   }
 
   public deprecated class RenamingDelegatingContext extends android.content.ContextWrapper {
@@ -37634,11 +37634,11 @@
     ctor public RenamingDelegatingContext(android.content.Context, android.content.Context, java.lang.String);
     method public java.lang.String getDatabasePrefix();
     method public void makeExistingFilesAndDbsAccessible();
-    method public static T providerWithRenamedContext(java.lang.Class<T>, android.content.Context, java.lang.String) throws java.lang.IllegalAccessException, java.lang.InstantiationException;
-    method public static T providerWithRenamedContext(java.lang.Class<T>, android.content.Context, java.lang.String, boolean) throws java.lang.IllegalAccessException, java.lang.InstantiationException;
+    method public static <T extends android.content.ContentProvider> T providerWithRenamedContext(java.lang.Class<T>, android.content.Context, java.lang.String) throws java.lang.IllegalAccessException, java.lang.InstantiationException;
+    method public static <T extends android.content.ContentProvider> T providerWithRenamedContext(java.lang.Class<T>, android.content.Context, java.lang.String, boolean) throws java.lang.IllegalAccessException, java.lang.InstantiationException;
   }
 
-  public abstract deprecated class ServiceTestCase extends android.test.AndroidTestCase {
+  public abstract deprecated class ServiceTestCase<T extends android.app.Service> extends android.test.AndroidTestCase {
     ctor public ServiceTestCase(java.lang.Class<T>);
     method protected android.os.IBinder bindService(android.content.Intent);
     method public android.app.Application getApplication();
@@ -37651,7 +37651,7 @@
     method public void testServiceTestCaseSetUpProperly() throws java.lang.Exception;
   }
 
-  public abstract deprecated class SingleLaunchActivityTestCase extends android.test.InstrumentationTestCase {
+  public abstract deprecated class SingleLaunchActivityTestCase<T extends android.app.Activity> extends android.test.InstrumentationTestCase {
     ctor public SingleLaunchActivityTestCase(java.lang.String, java.lang.Class<T>);
     method public T getActivity();
     method public void testActivityTestCaseSetUpProperly() throws java.lang.Exception;
@@ -38006,7 +38006,7 @@
     ctor public TestMethod(java.lang.String, java.lang.Class<? extends junit.framework.TestCase>);
     ctor public TestMethod(junit.framework.TestCase);
     method public junit.framework.TestCase createTest() throws java.lang.IllegalAccessException, java.lang.InstantiationException, java.lang.reflect.InvocationTargetException;
-    method public T getAnnotation(java.lang.Class<T>);
+    method public <T extends java.lang.annotation.Annotation> T getAnnotation(java.lang.Class<T>);
     method public java.lang.Class<? extends junit.framework.TestCase> getEnclosingClass();
     method public java.lang.String getEnclosingClassname();
     method public java.lang.String getName();
@@ -38449,7 +38449,7 @@
     method public int getSpanEnd(java.lang.Object);
     method public int getSpanFlags(java.lang.Object);
     method public int getSpanStart(java.lang.Object);
-    method public T[] getSpans(int, int, java.lang.Class<T>);
+    method public <T> T[] getSpans(int, int, java.lang.Class<T>);
     method public deprecated int getTextRunCursor(int, int, int, int, int, android.graphics.Paint);
     method public int getTextWatcherDepth();
     method public android.text.SpannableStringBuilder insert(int, java.lang.CharSequence, int, int);
@@ -38471,7 +38471,7 @@
     method public int getSpanEnd(java.lang.Object);
     method public int getSpanFlags(java.lang.Object);
     method public int getSpanStart(java.lang.Object);
-    method public T[] getSpans(int, int, java.lang.Class<T>);
+    method public <T> T[] getSpans(int, int, java.lang.Class<T>);
     method public final int length();
     method public int nextSpanTransition(int, int, java.lang.Class);
     method public final java.lang.String toString();
@@ -38481,7 +38481,7 @@
     method public abstract int getSpanEnd(java.lang.Object);
     method public abstract int getSpanFlags(java.lang.Object);
     method public abstract int getSpanStart(java.lang.Object);
-    method public abstract T[] getSpans(int, int, java.lang.Class<T>);
+    method public abstract <T> T[] getSpans(int, int, java.lang.Class<T>);
     method public abstract int nextSpanTransition(int, int, java.lang.Class);
     field public static final int SPAN_COMPOSING = 256; // 0x100
     field public static final int SPAN_EXCLUSIVE_EXCLUSIVE = 33; // 0x21
@@ -39458,7 +39458,7 @@
     field public static final int WEEKDAY_WEDNESDAY = 4; // 0x4
   }
 
-  public static class TtsSpan.Builder {
+  public static class TtsSpan.Builder<C extends android.text.style.TtsSpan.Builder<?>> {
     ctor public TtsSpan.Builder(java.lang.String);
     method public android.text.style.TtsSpan build();
     method public C setIntArgument(java.lang.String, int);
@@ -39554,7 +39554,7 @@
     method public android.text.style.TtsSpan.OrdinalBuilder setNumber(java.lang.String);
   }
 
-  public static class TtsSpan.SemioticClassBuilder extends android.text.style.TtsSpan.Builder {
+  public static class TtsSpan.SemioticClassBuilder<C extends android.text.style.TtsSpan.SemioticClassBuilder<?>> extends android.text.style.TtsSpan.Builder {
     ctor public TtsSpan.SemioticClassBuilder(java.lang.String);
     method public C setAnimacy(java.lang.String);
     method public C setCase(java.lang.String);
@@ -39961,7 +39961,7 @@
     ctor public AndroidRuntimeException(java.lang.Exception);
   }
 
-  public final class ArrayMap implements java.util.Map {
+  public final class ArrayMap<K, V> implements java.util.Map {
     ctor public ArrayMap();
     ctor public ArrayMap(int);
     ctor public ArrayMap(android.util.ArrayMap<K, V>);
@@ -39989,7 +39989,7 @@
     method public java.util.Collection<V> values();
   }
 
-  public final class ArraySet implements java.util.Collection java.util.Set {
+  public final class ArraySet<E> implements java.util.Collection java.util.Set {
     ctor public ArraySet();
     ctor public ArraySet(int);
     ctor public ArraySet(android.util.ArraySet<E>);
@@ -40010,7 +40010,7 @@
     method public boolean retainAll(java.util.Collection<?>);
     method public int size();
     method public java.lang.Object[] toArray();
-    method public T[] toArray(T[]);
+    method public <T> T[] toArray(T[]);
     method public E valueAt(int);
   }
 
@@ -40152,13 +40152,13 @@
   public deprecated class FloatMath {
   }
 
-  public abstract class FloatProperty extends android.util.Property {
+  public abstract class FloatProperty<T> extends android.util.Property {
     ctor public FloatProperty(java.lang.String);
     method public final void set(T, java.lang.Float);
     method public abstract void setValue(T, float);
   }
 
-  public abstract class IntProperty extends android.util.Property {
+  public abstract class IntProperty<T> extends android.util.Property {
     ctor public IntProperty(java.lang.String);
     method public final void set(T, java.lang.Integer);
     method public abstract void setValue(T, int);
@@ -40258,7 +40258,7 @@
     method public void println(java.lang.String);
   }
 
-  public class LongSparseArray implements java.lang.Cloneable {
+  public class LongSparseArray<E> implements java.lang.Cloneable {
     ctor public LongSparseArray();
     ctor public LongSparseArray(int);
     method public void append(long, E);
@@ -40278,7 +40278,7 @@
     method public E valueAt(int);
   }
 
-  public class LruCache {
+  public class LruCache<K, V> {
     ctor public LruCache(int);
     method protected V create(K);
     method public final synchronized int createCount();
@@ -40366,9 +40366,9 @@
     ctor public NoSuchPropertyException(java.lang.String);
   }
 
-  public class Pair {
+  public class Pair<F, S> {
     ctor public Pair(F, S);
-    method public static android.util.Pair<A, B> create(A, B);
+    method public static <A, B> android.util.Pair<A, B> create(A, B);
     field public final F first;
     field public final S second;
   }
@@ -40401,22 +40401,22 @@
     method public abstract void println(java.lang.String);
   }
 
-  public abstract class Property {
+  public abstract class Property<T, V> {
     ctor public Property(java.lang.Class<V>, java.lang.String);
     method public abstract V get(T);
     method public java.lang.String getName();
     method public java.lang.Class<V> getType();
     method public boolean isReadOnly();
-    method public static android.util.Property<T, V> of(java.lang.Class<T>, java.lang.Class<V>, java.lang.String);
+    method public static <T, V> android.util.Property<T, V> of(java.lang.Class<T>, java.lang.Class<V>, java.lang.String);
     method public void set(T, V);
   }
 
-  public final class Range {
+  public final class Range<T extends java.lang.Comparable<? super T>> {
     ctor public Range(T, T);
     method public T clamp(T);
     method public boolean contains(T);
     method public boolean contains(android.util.Range<T>);
-    method public static android.util.Range<T> create(T, T);
+    method public static <T extends java.lang.Comparable<? super T>> android.util.Range<T> create(T, T);
     method public android.util.Range<T> extend(android.util.Range<T>);
     method public android.util.Range<T> extend(T, T);
     method public android.util.Range<T> extend(T);
@@ -40460,7 +40460,7 @@
     method public static android.util.SizeF parseSizeF(java.lang.String) throws java.lang.NumberFormatException;
   }
 
-  public class SparseArray implements java.lang.Cloneable {
+  public class SparseArray<E> implements java.lang.Cloneable {
     ctor public SparseArray();
     ctor public SparseArray(int);
     method public void append(int, E);
@@ -40820,8 +40820,11 @@
     field public static final android.os.Parcelable.Creator<android.view.Display.Mode> CREATOR;
   }
 
-  public final class DragAndDropPermissions {
+  public final class DragAndDropPermissions implements android.os.Parcelable {
+    method public int describeContents();
     method public void release();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.view.DragAndDropPermissions> CREATOR;
   }
 
   public class DragEvent implements android.os.Parcelable {
@@ -45161,7 +45164,7 @@
     method public static java.lang.String stripAnchor(java.lang.String);
   }
 
-  public abstract interface ValueCallback {
+  public abstract interface ValueCallback<T> {
     method public abstract void onReceiveValue(T);
   }
 
@@ -45895,7 +45898,7 @@
     field public static final int NO_SELECTION = -2147483648; // 0x80000000
   }
 
-  public abstract class AdapterView extends android.view.ViewGroup {
+  public abstract class AdapterView<T extends android.widget.Adapter> extends android.view.ViewGroup {
     ctor public AdapterView(android.content.Context);
     ctor public AdapterView(android.content.Context, android.util.AttributeSet);
     ctor public AdapterView(android.content.Context, android.util.AttributeSet, int);
@@ -46018,7 +46021,7 @@
     ctor public AnalogClock(android.content.Context, android.util.AttributeSet, int, int);
   }
 
-  public class ArrayAdapter extends android.widget.BaseAdapter implements android.widget.Filterable android.widget.ThemedSpinnerAdapter {
+  public class ArrayAdapter<T> extends android.widget.BaseAdapter implements android.widget.Filterable android.widget.ThemedSpinnerAdapter {
     ctor public ArrayAdapter(android.content.Context, int);
     ctor public ArrayAdapter(android.content.Context, int, int);
     ctor public ArrayAdapter(android.content.Context, int, T[]);
@@ -46079,7 +46082,7 @@
     method protected void performFiltering(java.lang.CharSequence, int);
     method public void performValidation();
     method protected void replaceText(java.lang.CharSequence);
-    method public void setAdapter(T);
+    method public <T extends android.widget.ListAdapter & android.widget.Filterable> void setAdapter(T);
     method public void setCompletionHint(java.lang.CharSequence);
     method public void setDropDownAnchor(int);
     method public void setDropDownBackgroundDrawable(android.graphics.drawable.Drawable);
@@ -48364,7 +48367,7 @@
 
 package com.android.internal.util {
 
-  public abstract interface Predicate {
+  public abstract interface Predicate<T> {
     method public abstract boolean apply(T);
   }
 
@@ -50411,13 +50414,13 @@
     enum_constant public static final java.lang.Character.UnicodeScript YI;
   }
 
-  public final class Class implements java.lang.reflect.AnnotatedElement java.lang.reflect.GenericDeclaration java.io.Serializable java.lang.reflect.Type {
-    method public java.lang.Class<? extends U> asSubclass(java.lang.Class<U>);
+  public final class Class<T> implements java.lang.reflect.AnnotatedElement java.lang.reflect.GenericDeclaration java.io.Serializable java.lang.reflect.Type {
+    method public <U> java.lang.Class<? extends U> asSubclass(java.lang.Class<U>);
     method public T cast(java.lang.Object);
     method public boolean desiredAssertionStatus();
     method public static java.lang.Class<?> forName(java.lang.String) throws java.lang.ClassNotFoundException;
     method public static java.lang.Class<?> forName(java.lang.String, boolean, java.lang.ClassLoader) throws java.lang.ClassNotFoundException;
-    method public A getAnnotation(java.lang.Class<A>);
+    method public <A extends java.lang.annotation.Annotation> A getAnnotation(java.lang.Class<A>);
     method public java.lang.annotation.Annotation[] getAnnotations();
     method public java.lang.String getCanonicalName();
     method public java.lang.ClassLoader getClassLoader();
@@ -50534,7 +50537,7 @@
   public abstract interface Cloneable {
   }
 
-  public abstract interface Comparable {
+  public abstract interface Comparable<T> {
     method public abstract int compareTo(T);
   }
 
@@ -50588,7 +50591,7 @@
     field public static final java.lang.Class<java.lang.Double> TYPE;
   }
 
-  public abstract class Enum implements java.lang.Comparable java.io.Serializable {
+  public abstract class Enum<E extends java.lang.Enum<E>> implements java.lang.Comparable java.io.Serializable {
     ctor protected Enum(java.lang.String, int);
     method protected final java.lang.Object clone() throws java.lang.CloneNotSupportedException;
     method public final int compareTo(E);
@@ -50598,7 +50601,7 @@
     method public final int hashCode();
     method public final java.lang.String name();
     method public final int ordinal();
-    method public static T valueOf(java.lang.Class<T>, java.lang.String);
+    method public static <T extends java.lang.Enum<T>> T valueOf(java.lang.Class<T>, java.lang.String);
   }
 
   public class EnumConstantNotPresentException extends java.lang.RuntimeException {
@@ -50717,7 +50720,7 @@
     ctor public IndexOutOfBoundsException(java.lang.String);
   }
 
-  public class InheritableThreadLocal extends java.lang.ThreadLocal {
+  public class InheritableThreadLocal<T> extends java.lang.ThreadLocal {
     ctor public InheritableThreadLocal();
     method protected T childValue(T);
   }
@@ -50788,7 +50791,7 @@
     ctor public InterruptedException(java.lang.String);
   }
 
-  public abstract interface Iterable {
+  public abstract interface Iterable<T> {
     method public default void forEach(java.util.function.Consumer<? super T>);
     method public abstract java.util.Iterator<T> iterator();
     method public default java.util.Spliterator<T> spliterator();
@@ -50996,12 +50999,12 @@
   }
 
   public class Package implements java.lang.reflect.AnnotatedElement {
-    method public A getAnnotation(java.lang.Class<A>);
+    method public <A extends java.lang.annotation.Annotation> A getAnnotation(java.lang.Class<A>);
     method public java.lang.annotation.Annotation[] getAnnotations();
-    method public A[] getAnnotationsByType(java.lang.Class<A>);
-    method public A getDeclaredAnnotation(java.lang.Class<A>);
+    method public <A extends java.lang.annotation.Annotation> A[] getAnnotationsByType(java.lang.Class<A>);
+    method public <A extends java.lang.annotation.Annotation> A getDeclaredAnnotation(java.lang.Class<A>);
     method public java.lang.annotation.Annotation[] getDeclaredAnnotations();
-    method public A[] getDeclaredAnnotationsByType(java.lang.Class<A>);
+    method public <A extends java.lang.annotation.Annotation> A[] getDeclaredAnnotationsByType(java.lang.Class<A>);
     method public java.lang.String getImplementationTitle();
     method public java.lang.String getImplementationVendor();
     method public java.lang.String getImplementationVersion();
@@ -51561,7 +51564,7 @@
     method public void uncaughtException(java.lang.Thread, java.lang.Throwable);
   }
 
-  public class ThreadLocal {
+  public class ThreadLocal<T> {
     ctor public ThreadLocal();
     method public T get();
     method protected T initialValue();
@@ -51701,30 +51704,30 @@
 
 package java.lang.ref {
 
-  public class PhantomReference extends java.lang.ref.Reference {
+  public class PhantomReference<T> extends java.lang.ref.Reference {
     ctor public PhantomReference(T, java.lang.ref.ReferenceQueue<? super T>);
   }
 
-  public abstract class Reference {
+  public abstract class Reference<T> {
     method public void clear();
     method public boolean enqueue();
     method public T get();
     method public boolean isEnqueued();
   }
 
-  public class ReferenceQueue {
+  public class ReferenceQueue<T> {
     ctor public ReferenceQueue();
     method public java.lang.ref.Reference<? extends T> poll();
     method public java.lang.ref.Reference<? extends T> remove(long) throws java.lang.IllegalArgumentException, java.lang.InterruptedException;
     method public java.lang.ref.Reference<? extends T> remove() throws java.lang.InterruptedException;
   }
 
-  public class SoftReference extends java.lang.ref.Reference {
+  public class SoftReference<T> extends java.lang.ref.Reference {
     ctor public SoftReference(T);
     ctor public SoftReference(T, java.lang.ref.ReferenceQueue<? super T>);
   }
 
-  public class WeakReference extends java.lang.ref.Reference {
+  public class WeakReference<T> extends java.lang.ref.Reference {
     ctor public WeakReference(T);
     ctor public WeakReference(T, java.lang.ref.ReferenceQueue<? super T>);
   }
@@ -51735,7 +51738,7 @@
 
   public class AccessibleObject implements java.lang.reflect.AnnotatedElement {
     ctor protected AccessibleObject();
-    method public T getAnnotation(java.lang.Class<T>);
+    method public <T extends java.lang.annotation.Annotation> T getAnnotation(java.lang.Class<T>);
     method public java.lang.annotation.Annotation[] getAnnotations();
     method public java.lang.annotation.Annotation[] getDeclaredAnnotations();
     method public boolean isAccessible();
@@ -51744,12 +51747,12 @@
   }
 
   public abstract interface AnnotatedElement {
-    method public abstract T getAnnotation(java.lang.Class<T>);
+    method public abstract <T extends java.lang.annotation.Annotation> T getAnnotation(java.lang.Class<T>);
     method public abstract java.lang.annotation.Annotation[] getAnnotations();
-    method public default T[] getAnnotationsByType(java.lang.Class<T>);
-    method public default java.lang.annotation.Annotation getDeclaredAnnotation(java.lang.Class<T>);
+    method public default <T extends java.lang.annotation.Annotation> T[] getAnnotationsByType(java.lang.Class<T>);
+    method public default <T extends java.lang.annotation.Annotation> java.lang.annotation.Annotation getDeclaredAnnotation(java.lang.Class<T>);
     method public abstract java.lang.annotation.Annotation[] getDeclaredAnnotations();
-    method public default T[] getDeclaredAnnotationsByType(java.lang.Class<T>);
+    method public default <T extends java.lang.annotation.Annotation> T[] getDeclaredAnnotationsByType(java.lang.Class<T>);
     method public default boolean isAnnotationPresent(java.lang.Class<? extends java.lang.annotation.Annotation>);
   }
 
@@ -51777,8 +51780,8 @@
     method public static void setShort(java.lang.Object, int, short) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException;
   }
 
-  public final class Constructor extends java.lang.reflect.AccessibleObject implements java.lang.reflect.GenericDeclaration java.lang.reflect.Member {
-    method public A getAnnotation(java.lang.Class<A>);
+  public final class Constructor<T> extends java.lang.reflect.AccessibleObject implements java.lang.reflect.GenericDeclaration java.lang.reflect.Member {
+    method public <A extends java.lang.annotation.Annotation> A getAnnotation(java.lang.Class<A>);
     method public java.lang.Class<T> getDeclaringClass();
     method public java.lang.Class<?>[] getExceptionTypes();
     method public java.lang.reflect.Type[] getGenericExceptionTypes();
@@ -51797,7 +51800,7 @@
 
   public final class Field extends java.lang.reflect.AccessibleObject implements java.lang.reflect.Member {
     method public java.lang.Object get(java.lang.Object) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException;
-    method public A getAnnotation(java.lang.Class<A>);
+    method public <A extends java.lang.annotation.Annotation> A getAnnotation(java.lang.Class<A>);
     method public boolean getBoolean(java.lang.Object) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException;
     method public byte getByte(java.lang.Object) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException;
     method public char getChar(java.lang.Object) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException;
@@ -51863,7 +51866,7 @@
   }
 
   public final class Method extends java.lang.reflect.AccessibleObject implements java.lang.reflect.GenericDeclaration java.lang.reflect.Member {
-    method public A getAnnotation(java.lang.Class<A>);
+    method public <A extends java.lang.annotation.Annotation> A getAnnotation(java.lang.Class<A>);
     method public java.lang.Class<?> getDeclaringClass();
     method public java.lang.Object getDefaultValue();
     method public java.lang.Class<?>[] getExceptionTypes();
@@ -51941,7 +51944,7 @@
   public abstract interface Type {
   }
 
-  public abstract interface TypeVariable implements java.lang.reflect.Type {
+  public abstract interface TypeVariable<D extends java.lang.reflect.GenericDeclaration> implements java.lang.reflect.Type {
     method public abstract java.lang.reflect.Type[] getBounds();
     method public abstract D getGenericDeclaration();
     method public abstract java.lang.String getName();
@@ -52730,7 +52733,7 @@
     method public abstract java.net.SocketImpl createSocketImpl();
   }
 
-  public abstract interface SocketOption {
+  public abstract interface SocketOption<T> {
     method public abstract java.lang.String name();
     method public abstract java.lang.Class<T> type();
   }
@@ -53314,7 +53317,7 @@
     method public final long read(java.nio.ByteBuffer[]) throws java.io.IOException;
     method public abstract java.net.SocketAddress receive(java.nio.ByteBuffer) throws java.io.IOException;
     method public abstract int send(java.nio.ByteBuffer, java.net.SocketAddress) throws java.io.IOException;
-    method public abstract java.nio.channels.DatagramChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
+    method public abstract <T> java.nio.channels.DatagramChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
     method public abstract java.net.DatagramSocket socket();
     method public final int validOps();
     method public abstract int write(java.nio.ByteBuffer) throws java.io.IOException;
@@ -53390,8 +53393,8 @@
   public abstract interface NetworkChannel implements java.nio.channels.Channel {
     method public abstract java.nio.channels.NetworkChannel bind(java.net.SocketAddress) throws java.io.IOException;
     method public abstract java.net.SocketAddress getLocalAddress() throws java.io.IOException;
-    method public abstract T getOption(java.net.SocketOption<T>) throws java.io.IOException;
-    method public abstract java.nio.channels.NetworkChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
+    method public abstract <T> T getOption(java.net.SocketOption<T>) throws java.io.IOException;
+    method public abstract <T> java.nio.channels.NetworkChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
     method public abstract java.util.Set<java.net.SocketOption<?>> supportedOptions();
   }
 
@@ -53508,7 +53511,7 @@
     method public final java.nio.channels.ServerSocketChannel bind(java.net.SocketAddress) throws java.io.IOException;
     method public abstract java.nio.channels.ServerSocketChannel bind(java.net.SocketAddress, int) throws java.io.IOException;
     method public static java.nio.channels.ServerSocketChannel open() throws java.io.IOException;
-    method public abstract java.nio.channels.ServerSocketChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
+    method public abstract <T> java.nio.channels.ServerSocketChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
     method public abstract java.net.ServerSocket socket();
     method public final int validOps();
   }
@@ -53526,7 +53529,7 @@
     method public abstract int read(java.nio.ByteBuffer) throws java.io.IOException;
     method public abstract long read(java.nio.ByteBuffer[], int, int) throws java.io.IOException;
     method public final long read(java.nio.ByteBuffer[]) throws java.io.IOException;
-    method public abstract java.nio.channels.SocketChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
+    method public abstract <T> java.nio.channels.SocketChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
     method public abstract java.nio.channels.SocketChannel shutdownInput() throws java.io.IOException;
     method public abstract java.nio.channels.SocketChannel shutdownOutput() throws java.io.IOException;
     method public abstract java.net.Socket socket();
@@ -53773,12 +53776,12 @@
 
   public final class AccessController {
     method public static void checkPermission(java.security.Permission) throws java.security.AccessControlException;
-    method public static T doPrivileged(java.security.PrivilegedAction<T>);
-    method public static T doPrivileged(java.security.PrivilegedAction<T>, java.security.AccessControlContext);
-    method public static T doPrivileged(java.security.PrivilegedExceptionAction<T>) throws java.security.PrivilegedActionException;
-    method public static T doPrivileged(java.security.PrivilegedExceptionAction<T>, java.security.AccessControlContext) throws java.security.PrivilegedActionException;
-    method public static T doPrivilegedWithCombiner(java.security.PrivilegedAction<T>);
-    method public static T doPrivilegedWithCombiner(java.security.PrivilegedExceptionAction<T>) throws java.security.PrivilegedActionException;
+    method public static <T> T doPrivileged(java.security.PrivilegedAction<T>);
+    method public static <T> T doPrivileged(java.security.PrivilegedAction<T>, java.security.AccessControlContext);
+    method public static <T> T doPrivileged(java.security.PrivilegedExceptionAction<T>) throws java.security.PrivilegedActionException;
+    method public static <T> T doPrivileged(java.security.PrivilegedExceptionAction<T>, java.security.AccessControlContext) throws java.security.PrivilegedActionException;
+    method public static <T> T doPrivilegedWithCombiner(java.security.PrivilegedAction<T>);
+    method public static <T> T doPrivilegedWithCombiner(java.security.PrivilegedExceptionAction<T>) throws java.security.PrivilegedActionException;
     method public static java.security.AccessControlContext getContext();
   }
 
@@ -53817,7 +53820,7 @@
     method public static java.security.AlgorithmParameters getInstance(java.lang.String) throws java.security.NoSuchAlgorithmException;
     method public static java.security.AlgorithmParameters getInstance(java.lang.String, java.lang.String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException;
     method public static java.security.AlgorithmParameters getInstance(java.lang.String, java.security.Provider) throws java.security.NoSuchAlgorithmException;
-    method public final T getParameterSpec(java.lang.Class<T>) throws java.security.spec.InvalidParameterSpecException;
+    method public final <T extends java.security.spec.AlgorithmParameterSpec> T getParameterSpec(java.lang.Class<T>) throws java.security.spec.InvalidParameterSpecException;
     method public final java.security.Provider getProvider();
     method public final void init(java.security.spec.AlgorithmParameterSpec) throws java.security.spec.InvalidParameterSpecException;
     method public final void init(byte[]) throws java.io.IOException;
@@ -53829,7 +53832,7 @@
     ctor public AlgorithmParametersSpi();
     method protected abstract byte[] engineGetEncoded() throws java.io.IOException;
     method protected abstract byte[] engineGetEncoded(java.lang.String) throws java.io.IOException;
-    method protected abstract T engineGetParameterSpec(java.lang.Class<T>) throws java.security.spec.InvalidParameterSpecException;
+    method protected abstract <T extends java.security.spec.AlgorithmParameterSpec> T engineGetParameterSpec(java.lang.Class<T>) throws java.security.spec.InvalidParameterSpecException;
     method protected abstract void engineInit(java.security.spec.AlgorithmParameterSpec) throws java.security.spec.InvalidParameterSpecException;
     method protected abstract void engineInit(byte[]) throws java.io.IOException;
     method protected abstract void engineInit(byte[], java.lang.String) throws java.io.IOException;
@@ -54014,7 +54017,7 @@
     method public static java.security.KeyFactory getInstance(java.lang.String) throws java.security.NoSuchAlgorithmException;
     method public static java.security.KeyFactory getInstance(java.lang.String, java.lang.String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException;
     method public static java.security.KeyFactory getInstance(java.lang.String, java.security.Provider) throws java.security.NoSuchAlgorithmException;
-    method public final T getKeySpec(java.security.Key, java.lang.Class<T>) throws java.security.spec.InvalidKeySpecException;
+    method public final <T extends java.security.spec.KeySpec> T getKeySpec(java.security.Key, java.lang.Class<T>) throws java.security.spec.InvalidKeySpecException;
     method public final java.security.Provider getProvider();
     method public final java.security.Key translateKey(java.security.Key) throws java.security.InvalidKeyException;
   }
@@ -54023,7 +54026,7 @@
     ctor public KeyFactorySpi();
     method protected abstract java.security.PrivateKey engineGeneratePrivate(java.security.spec.KeySpec) throws java.security.spec.InvalidKeySpecException;
     method protected abstract java.security.PublicKey engineGeneratePublic(java.security.spec.KeySpec) throws java.security.spec.InvalidKeySpecException;
-    method protected abstract T engineGetKeySpec(java.security.Key, java.lang.Class<T>) throws java.security.spec.InvalidKeySpecException;
+    method protected abstract <T extends java.security.spec.KeySpec> T engineGetKeySpec(java.security.Key, java.lang.Class<T>) throws java.security.spec.InvalidKeySpecException;
     method protected abstract java.security.Key engineTranslateKey(java.security.Key) throws java.security.InvalidKeyException;
   }
 
@@ -54292,7 +54295,7 @@
     field public static final long serialVersionUID = 6034044314589513430L; // 0x53bd3b559a12c6d6L
   }
 
-  public abstract interface PrivilegedAction {
+  public abstract interface PrivilegedAction<T> {
     method public abstract T run();
   }
 
@@ -54301,7 +54304,7 @@
     method public java.lang.Exception getException();
   }
 
-  public abstract interface PrivilegedExceptionAction {
+  public abstract interface PrivilegedExceptionAction<T> {
     method public abstract T run() throws java.lang.Exception;
   }
 
@@ -56483,11 +56486,11 @@
     method public abstract void free() throws java.sql.SQLException;
     method public abstract java.io.InputStream getBinaryStream() throws java.sql.SQLException;
     method public abstract java.io.Reader getCharacterStream() throws java.sql.SQLException;
-    method public abstract T getSource(java.lang.Class<T>) throws java.sql.SQLException;
+    method public abstract <T extends javax.xml.transform.Source> T getSource(java.lang.Class<T>) throws java.sql.SQLException;
     method public abstract java.lang.String getString() throws java.sql.SQLException;
     method public abstract java.io.OutputStream setBinaryStream() throws java.sql.SQLException;
     method public abstract java.io.Writer setCharacterStream() throws java.sql.SQLException;
-    method public abstract T setResult(java.lang.Class<T>) throws java.sql.SQLException;
+    method public abstract <T extends javax.xml.transform.Result> T setResult(java.lang.Class<T>) throws java.sql.SQLException;
     method public abstract void setString(java.lang.String) throws java.sql.SQLException;
   }
 
@@ -56611,7 +56614,7 @@
 
   public abstract interface Wrapper {
     method public abstract boolean isWrapperFor(java.lang.Class<?>) throws java.sql.SQLException;
-    method public abstract T unwrap(java.lang.Class<T>) throws java.sql.SQLException;
+    method public abstract <T> T unwrap(java.lang.Class<T>) throws java.sql.SQLException;
   }
 
 }
@@ -57144,7 +57147,7 @@
 
 package java.util {
 
-  public abstract class AbstractCollection implements java.util.Collection {
+  public abstract class AbstractCollection<E> implements java.util.Collection {
     ctor protected AbstractCollection();
     method public boolean add(E);
     method public boolean addAll(java.util.Collection<? extends E>);
@@ -57158,10 +57161,10 @@
     method public boolean retainAll(java.util.Collection<?>);
     method public abstract int size();
     method public java.lang.Object[] toArray();
-    method public T[] toArray(T[]);
+    method public <T> T[] toArray(T[]);
   }
 
-  public abstract class AbstractList extends java.util.AbstractCollection implements java.util.List {
+  public abstract class AbstractList<E> extends java.util.AbstractCollection implements java.util.List {
     ctor protected AbstractList();
     method public void add(int, E);
     method public boolean addAll(int, java.util.Collection<? extends E>);
@@ -57178,7 +57181,7 @@
     field protected transient int modCount;
   }
 
-  public abstract class AbstractMap implements java.util.Map {
+  public abstract class AbstractMap<K, V> implements java.util.Map {
     ctor protected AbstractMap();
     method public void clear();
     method public boolean containsKey(java.lang.Object);
@@ -57194,7 +57197,7 @@
     method public java.util.Collection<V> values();
   }
 
-  public static class AbstractMap.SimpleEntry implements java.util.Map.Entry java.io.Serializable {
+  public static class AbstractMap.SimpleEntry<K, V> implements java.util.Map.Entry java.io.Serializable {
     ctor public AbstractMap.SimpleEntry(K, V);
     ctor public AbstractMap.SimpleEntry(java.util.Map.Entry<? extends K, ? extends V>);
     method public K getKey();
@@ -57202,7 +57205,7 @@
     method public V setValue(V);
   }
 
-  public static class AbstractMap.SimpleImmutableEntry implements java.util.Map.Entry java.io.Serializable {
+  public static class AbstractMap.SimpleImmutableEntry<K, V> implements java.util.Map.Entry java.io.Serializable {
     ctor public AbstractMap.SimpleImmutableEntry(K, V);
     ctor public AbstractMap.SimpleImmutableEntry(java.util.Map.Entry<? extends K, ? extends V>);
     method public K getKey();
@@ -57210,23 +57213,23 @@
     method public V setValue(V);
   }
 
-  public abstract class AbstractQueue extends java.util.AbstractCollection implements java.util.Queue {
+  public abstract class AbstractQueue<E> extends java.util.AbstractCollection implements java.util.Queue {
     ctor protected AbstractQueue();
     method public E element();
     method public E remove();
   }
 
-  public abstract class AbstractSequentialList extends java.util.AbstractList {
+  public abstract class AbstractSequentialList<E> extends java.util.AbstractList {
     ctor protected AbstractSequentialList();
     method public E get(int);
     method public abstract java.util.ListIterator<E> listIterator(int);
   }
 
-  public abstract class AbstractSet extends java.util.AbstractCollection implements java.util.Set {
+  public abstract class AbstractSet<E> extends java.util.AbstractCollection implements java.util.Set {
     ctor protected AbstractSet();
   }
 
-  public class ArrayDeque extends java.util.AbstractCollection implements java.lang.Cloneable java.util.Deque java.io.Serializable {
+  public class ArrayDeque<E> extends java.util.AbstractCollection implements java.lang.Cloneable java.util.Deque java.io.Serializable {
     ctor public ArrayDeque();
     ctor public ArrayDeque(int);
     ctor public ArrayDeque(java.util.Collection<? extends E>);
@@ -57258,7 +57261,7 @@
     method public java.util.Spliterator<E> spliterator();
   }
 
-  public class ArrayList extends java.util.AbstractList implements java.lang.Cloneable java.util.List java.util.RandomAccess java.io.Serializable {
+  public class ArrayList<E> extends java.util.AbstractList implements java.lang.Cloneable java.util.List java.util.RandomAccess java.io.Serializable {
     ctor public ArrayList(int);
     ctor public ArrayList();
     ctor public ArrayList(java.util.Collection<? extends E>);
@@ -57275,7 +57278,7 @@
   }
 
   public class Arrays {
-    method public static java.util.List<T> asList(T...);
+    method public static <T> java.util.List<T> asList(T...);
     method public static int binarySearch(long[], long);
     method public static int binarySearch(long[], int, int, long);
     method public static int binarySearch(int[], int);
@@ -57292,10 +57295,10 @@
     method public static int binarySearch(float[], int, int, float);
     method public static int binarySearch(java.lang.Object[], java.lang.Object);
     method public static int binarySearch(java.lang.Object[], int, int, java.lang.Object);
-    method public static int binarySearch(T[], T, java.util.Comparator<? super T>);
-    method public static int binarySearch(T[], int, int, T, java.util.Comparator<? super T>);
-    method public static T[] copyOf(T[], int);
-    method public static T[] copyOf(U[], int, java.lang.Class<? extends T[]>);
+    method public static <T> int binarySearch(T[], T, java.util.Comparator<? super T>);
+    method public static <T> int binarySearch(T[], int, int, T, java.util.Comparator<? super T>);
+    method public static <T> T[] copyOf(T[], int);
+    method public static <T, U> T[] copyOf(U[], int, java.lang.Class<? extends T[]>);
     method public static byte[] copyOf(byte[], int);
     method public static short[] copyOf(short[], int);
     method public static int[] copyOf(int[], int);
@@ -57304,8 +57307,8 @@
     method public static float[] copyOf(float[], int);
     method public static double[] copyOf(double[], int);
     method public static boolean[] copyOf(boolean[], int);
-    method public static T[] copyOfRange(T[], int, int);
-    method public static T[] copyOfRange(U[], int, int, java.lang.Class<? extends T[]>);
+    method public static <T> T[] copyOfRange(T[], int, int);
+    method public static <T, U> T[] copyOfRange(U[], int, int, java.lang.Class<? extends T[]>);
     method public static byte[] copyOfRange(byte[], int, int);
     method public static short[] copyOfRange(short[], int, int);
     method public static int[] copyOfRange(int[], int, int);
@@ -57353,15 +57356,15 @@
     method public static int hashCode(float[]);
     method public static int hashCode(double[]);
     method public static int hashCode(java.lang.Object[]);
-    method public static void parallelPrefix(T[], java.util.function.BinaryOperator<T>);
-    method public static void parallelPrefix(T[], int, int, java.util.function.BinaryOperator<T>);
+    method public static <T> void parallelPrefix(T[], java.util.function.BinaryOperator<T>);
+    method public static <T> void parallelPrefix(T[], int, int, java.util.function.BinaryOperator<T>);
     method public static void parallelPrefix(long[], java.util.function.LongBinaryOperator);
     method public static void parallelPrefix(long[], int, int, java.util.function.LongBinaryOperator);
     method public static void parallelPrefix(double[], java.util.function.DoubleBinaryOperator);
     method public static void parallelPrefix(double[], int, int, java.util.function.DoubleBinaryOperator);
     method public static void parallelPrefix(int[], java.util.function.IntBinaryOperator);
     method public static void parallelPrefix(int[], int, int, java.util.function.IntBinaryOperator);
-    method public static void parallelSetAll(T[], java.util.function.IntFunction<? extends T>);
+    method public static <T> void parallelSetAll(T[], java.util.function.IntFunction<? extends T>);
     method public static void parallelSetAll(int[], java.util.function.IntUnaryOperator);
     method public static void parallelSetAll(long[], java.util.function.IntToLongFunction);
     method public static void parallelSetAll(double[], java.util.function.IntToDoubleFunction);
@@ -57379,11 +57382,11 @@
     method public static void parallelSort(float[], int, int);
     method public static void parallelSort(double[]);
     method public static void parallelSort(double[], int, int);
-    method public static void parallelSort(T[]);
-    method public static void parallelSort(T[], int, int);
-    method public static void parallelSort(T[], java.util.Comparator<? super T>);
-    method public static void parallelSort(T[], int, int, java.util.Comparator<? super T>);
-    method public static void setAll(T[], java.util.function.IntFunction<? extends T>);
+    method public static <T extends java.lang.Comparable<? super T>> void parallelSort(T[]);
+    method public static <T extends java.lang.Comparable<? super T>> void parallelSort(T[], int, int);
+    method public static <T> void parallelSort(T[], java.util.Comparator<? super T>);
+    method public static <T> void parallelSort(T[], int, int, java.util.Comparator<? super T>);
+    method public static <T> void setAll(T[], java.util.function.IntFunction<? extends T>);
     method public static void setAll(int[], java.util.function.IntUnaryOperator);
     method public static void setAll(long[], java.util.function.IntToLongFunction);
     method public static void setAll(double[], java.util.function.IntToDoubleFunction);
@@ -57403,18 +57406,18 @@
     method public static void sort(double[], int, int);
     method public static void sort(java.lang.Object[]);
     method public static void sort(java.lang.Object[], int, int);
-    method public static void sort(T[], java.util.Comparator<? super T>);
-    method public static void sort(T[], int, int, java.util.Comparator<? super T>);
-    method public static java.util.Spliterator<T> spliterator(T[]);
-    method public static java.util.Spliterator<T> spliterator(T[], int, int);
+    method public static <T> void sort(T[], java.util.Comparator<? super T>);
+    method public static <T> void sort(T[], int, int, java.util.Comparator<? super T>);
+    method public static <T> java.util.Spliterator<T> spliterator(T[]);
+    method public static <T> java.util.Spliterator<T> spliterator(T[], int, int);
     method public static java.util.Spliterator.OfInt spliterator(int[]);
     method public static java.util.Spliterator.OfInt spliterator(int[], int, int);
     method public static java.util.Spliterator.OfLong spliterator(long[]);
     method public static java.util.Spliterator.OfLong spliterator(long[], int, int);
     method public static java.util.Spliterator.OfDouble spliterator(double[]);
     method public static java.util.Spliterator.OfDouble spliterator(double[], int, int);
-    method public static java.util.stream.Stream<T> stream(T[]);
-    method public static java.util.stream.Stream<T> stream(T[], int, int);
+    method public static <T> java.util.stream.Stream<T> stream(T[]);
+    method public static <T> java.util.stream.Stream<T> stream(T[], int, int);
     method public static java.util.stream.IntStream stream(int[]);
     method public static java.util.stream.IntStream stream(int[], int, int);
     method public static java.util.stream.LongStream stream(long[]);
@@ -57571,7 +57574,7 @@
     field protected long time;
   }
 
-  public abstract interface Collection implements java.lang.Iterable {
+  public abstract interface Collection<E> implements java.lang.Iterable {
     method public abstract boolean add(E);
     method public abstract boolean addAll(java.util.Collection<? extends E>);
     method public abstract void clear();
@@ -57589,86 +57592,86 @@
     method public abstract int size();
     method public default java.util.stream.Stream<E> stream();
     method public abstract java.lang.Object[] toArray();
-    method public abstract T[] toArray(T[]);
+    method public abstract <T> T[] toArray(T[]);
   }
 
   public class Collections {
-    method public static boolean addAll(java.util.Collection<? super T>, T...);
-    method public static java.util.Queue<T> asLifoQueue(java.util.Deque<T>);
-    method public static int binarySearch(java.util.List<? extends java.lang.Comparable<? super T>>, T);
-    method public static int binarySearch(java.util.List<? extends T>, T, java.util.Comparator<? super T>);
-    method public static java.util.Collection<E> checkedCollection(java.util.Collection<E>, java.lang.Class<E>);
-    method public static java.util.List<E> checkedList(java.util.List<E>, java.lang.Class<E>);
-    method public static java.util.Map<K, V> checkedMap(java.util.Map<K, V>, java.lang.Class<K>, java.lang.Class<V>);
-    method public static java.util.Set<E> checkedSet(java.util.Set<E>, java.lang.Class<E>);
-    method public static java.util.SortedMap<K, V> checkedSortedMap(java.util.SortedMap<K, V>, java.lang.Class<K>, java.lang.Class<V>);
-    method public static java.util.SortedSet<E> checkedSortedSet(java.util.SortedSet<E>, java.lang.Class<E>);
-    method public static void copy(java.util.List<? super T>, java.util.List<? extends T>);
+    method public static <T> boolean addAll(java.util.Collection<? super T>, T...);
+    method public static <T> java.util.Queue<T> asLifoQueue(java.util.Deque<T>);
+    method public static <T> int binarySearch(java.util.List<? extends java.lang.Comparable<? super T>>, T);
+    method public static <T> int binarySearch(java.util.List<? extends T>, T, java.util.Comparator<? super T>);
+    method public static <E> java.util.Collection<E> checkedCollection(java.util.Collection<E>, java.lang.Class<E>);
+    method public static <E> java.util.List<E> checkedList(java.util.List<E>, java.lang.Class<E>);
+    method public static <K, V> java.util.Map<K, V> checkedMap(java.util.Map<K, V>, java.lang.Class<K>, java.lang.Class<V>);
+    method public static <E> java.util.Set<E> checkedSet(java.util.Set<E>, java.lang.Class<E>);
+    method public static <K, V> java.util.SortedMap<K, V> checkedSortedMap(java.util.SortedMap<K, V>, java.lang.Class<K>, java.lang.Class<V>);
+    method public static <E> java.util.SortedSet<E> checkedSortedSet(java.util.SortedSet<E>, java.lang.Class<E>);
+    method public static <T> void copy(java.util.List<? super T>, java.util.List<? extends T>);
     method public static boolean disjoint(java.util.Collection<?>, java.util.Collection<?>);
-    method public static java.util.Enumeration<T> emptyEnumeration();
-    method public static java.util.Iterator<T> emptyIterator();
-    method public static final java.util.List<T> emptyList();
-    method public static java.util.ListIterator<T> emptyListIterator();
-    method public static final java.util.Map<K, V> emptyMap();
-    method public static final java.util.Set<T> emptySet();
-    method public static java.util.Enumeration<T> enumeration(java.util.Collection<T>);
-    method public static void fill(java.util.List<? super T>, T);
+    method public static <T> java.util.Enumeration<T> emptyEnumeration();
+    method public static <T> java.util.Iterator<T> emptyIterator();
+    method public static final <T> java.util.List<T> emptyList();
+    method public static <T> java.util.ListIterator<T> emptyListIterator();
+    method public static final <K, V> java.util.Map<K, V> emptyMap();
+    method public static final <T> java.util.Set<T> emptySet();
+    method public static <T> java.util.Enumeration<T> enumeration(java.util.Collection<T>);
+    method public static <T> void fill(java.util.List<? super T>, T);
     method public static int frequency(java.util.Collection<?>, java.lang.Object);
     method public static int indexOfSubList(java.util.List<?>, java.util.List<?>);
     method public static int lastIndexOfSubList(java.util.List<?>, java.util.List<?>);
-    method public static java.util.ArrayList<T> list(java.util.Enumeration<T>);
-    method public static T max(java.util.Collection<? extends T>);
-    method public static T max(java.util.Collection<? extends T>, java.util.Comparator<? super T>);
-    method public static T min(java.util.Collection<? extends T>);
-    method public static T min(java.util.Collection<? extends T>, java.util.Comparator<? super T>);
-    method public static java.util.List<T> nCopies(int, T);
-    method public static java.util.Set<E> newSetFromMap(java.util.Map<E, java.lang.Boolean>);
-    method public static boolean replaceAll(java.util.List<T>, T, T);
+    method public static <T> java.util.ArrayList<T> list(java.util.Enumeration<T>);
+    method public static <T extends java.lang.Object & java.lang.Comparable<? super T>> T max(java.util.Collection<? extends T>);
+    method public static <T> T max(java.util.Collection<? extends T>, java.util.Comparator<? super T>);
+    method public static <T extends java.lang.Object & java.lang.Comparable<? super T>> T min(java.util.Collection<? extends T>);
+    method public static <T> T min(java.util.Collection<? extends T>, java.util.Comparator<? super T>);
+    method public static <T> java.util.List<T> nCopies(int, T);
+    method public static <E> java.util.Set<E> newSetFromMap(java.util.Map<E, java.lang.Boolean>);
+    method public static <T> boolean replaceAll(java.util.List<T>, T, T);
     method public static void reverse(java.util.List<?>);
-    method public static java.util.Comparator<T> reverseOrder();
-    method public static java.util.Comparator<T> reverseOrder(java.util.Comparator<T>);
+    method public static <T> java.util.Comparator<T> reverseOrder();
+    method public static <T> java.util.Comparator<T> reverseOrder(java.util.Comparator<T>);
     method public static void rotate(java.util.List<?>, int);
     method public static void shuffle(java.util.List<?>);
     method public static void shuffle(java.util.List<?>, java.util.Random);
-    method public static java.util.Set<E> singleton(E);
-    method public static java.util.List<E> singletonList(E);
-    method public static java.util.Map<K, V> singletonMap(K, V);
-    method public static void sort(java.util.List<T>);
-    method public static void sort(java.util.List<T>, java.util.Comparator<? super T>);
+    method public static <E> java.util.Set<E> singleton(E);
+    method public static <E> java.util.List<E> singletonList(E);
+    method public static <K, V> java.util.Map<K, V> singletonMap(K, V);
+    method public static <T extends java.lang.Comparable<? super T>> void sort(java.util.List<T>);
+    method public static <T> void sort(java.util.List<T>, java.util.Comparator<? super T>);
     method public static void swap(java.util.List<?>, int, int);
-    method public static java.util.Collection<T> synchronizedCollection(java.util.Collection<T>);
-    method public static java.util.List<T> synchronizedList(java.util.List<T>);
-    method public static java.util.Map<K, V> synchronizedMap(java.util.Map<K, V>);
-    method public static java.util.Set<T> synchronizedSet(java.util.Set<T>);
-    method public static java.util.SortedMap<K, V> synchronizedSortedMap(java.util.SortedMap<K, V>);
-    method public static java.util.SortedSet<T> synchronizedSortedSet(java.util.SortedSet<T>);
-    method public static java.util.Collection<T> unmodifiableCollection(java.util.Collection<? extends T>);
-    method public static java.util.List<T> unmodifiableList(java.util.List<? extends T>);
-    method public static java.util.Map<K, V> unmodifiableMap(java.util.Map<? extends K, ? extends V>);
-    method public static java.util.Set<T> unmodifiableSet(java.util.Set<? extends T>);
-    method public static java.util.SortedMap<K, V> unmodifiableSortedMap(java.util.SortedMap<K, ? extends V>);
-    method public static java.util.SortedSet<T> unmodifiableSortedSet(java.util.SortedSet<T>);
+    method public static <T> java.util.Collection<T> synchronizedCollection(java.util.Collection<T>);
+    method public static <T> java.util.List<T> synchronizedList(java.util.List<T>);
+    method public static <K, V> java.util.Map<K, V> synchronizedMap(java.util.Map<K, V>);
+    method public static <T> java.util.Set<T> synchronizedSet(java.util.Set<T>);
+    method public static <K, V> java.util.SortedMap<K, V> synchronizedSortedMap(java.util.SortedMap<K, V>);
+    method public static <T> java.util.SortedSet<T> synchronizedSortedSet(java.util.SortedSet<T>);
+    method public static <T> java.util.Collection<T> unmodifiableCollection(java.util.Collection<? extends T>);
+    method public static <T> java.util.List<T> unmodifiableList(java.util.List<? extends T>);
+    method public static <K, V> java.util.Map<K, V> unmodifiableMap(java.util.Map<? extends K, ? extends V>);
+    method public static <T> java.util.Set<T> unmodifiableSet(java.util.Set<? extends T>);
+    method public static <K, V> java.util.SortedMap<K, V> unmodifiableSortedMap(java.util.SortedMap<K, ? extends V>);
+    method public static <T> java.util.SortedSet<T> unmodifiableSortedSet(java.util.SortedSet<T>);
     field public static final java.util.List EMPTY_LIST;
     field public static final java.util.Map EMPTY_MAP;
     field public static final java.util.Set EMPTY_SET;
   }
 
-  public abstract interface Comparator {
+  public abstract interface Comparator<T> {
     method public abstract int compare(T, T);
-    method public static java.util.Comparator<T> comparing(java.util.function.Function<? super T, ? extends U>, java.util.Comparator<? super U>);
-    method public static java.util.Comparator<T> comparing(java.util.function.Function<? super T, ? extends U>);
-    method public static java.util.Comparator<T> comparingDouble(java.util.function.ToDoubleFunction<? super T>);
-    method public static java.util.Comparator<T> comparingInt(java.util.function.ToIntFunction<? super T>);
-    method public static java.util.Comparator<T> comparingLong(java.util.function.ToLongFunction<? super T>);
+    method public static <T, U> java.util.Comparator<T> comparing(java.util.function.Function<? super T, ? extends U>, java.util.Comparator<? super U>);
+    method public static <T, U extends java.lang.Comparable<? super U>> java.util.Comparator<T> comparing(java.util.function.Function<? super T, ? extends U>);
+    method public static <T> java.util.Comparator<T> comparingDouble(java.util.function.ToDoubleFunction<? super T>);
+    method public static <T> java.util.Comparator<T> comparingInt(java.util.function.ToIntFunction<? super T>);
+    method public static <T> java.util.Comparator<T> comparingLong(java.util.function.ToLongFunction<? super T>);
     method public abstract boolean equals(java.lang.Object);
-    method public static java.util.Comparator<T> naturalOrder();
-    method public static java.util.Comparator<T> nullsFirst(java.util.Comparator<? super T>);
-    method public static java.util.Comparator<T> nullsLast(java.util.Comparator<? super T>);
-    method public static java.util.Comparator<T> reverseOrder();
+    method public static <T extends java.lang.Comparable<? super T>> java.util.Comparator<T> naturalOrder();
+    method public static <T> java.util.Comparator<T> nullsFirst(java.util.Comparator<? super T>);
+    method public static <T> java.util.Comparator<T> nullsLast(java.util.Comparator<? super T>);
+    method public static <T extends java.lang.Comparable<? super T>> java.util.Comparator<T> reverseOrder();
     method public default java.util.Comparator<T> reversed();
     method public default java.util.Comparator<T> thenComparing(java.util.Comparator<? super T>);
-    method public default java.util.Comparator<T> thenComparing(java.util.function.Function<? super T, ? extends U>, java.util.Comparator<? super U>);
-    method public default java.util.Comparator<T> thenComparing(java.util.function.Function<? super T, ? extends U>);
+    method public default <U> java.util.Comparator<T> thenComparing(java.util.function.Function<? super T, ? extends U>, java.util.Comparator<? super U>);
+    method public default <U extends java.lang.Comparable<? super U>> java.util.Comparator<T> thenComparing(java.util.function.Function<? super T, ? extends U>);
     method public default java.util.Comparator<T> thenComparingDouble(java.util.function.ToDoubleFunction<? super T>);
     method public default java.util.Comparator<T> thenComparingInt(java.util.function.ToIntFunction<? super T>);
     method public default java.util.Comparator<T> thenComparingLong(java.util.function.ToLongFunction<? super T>);
@@ -57727,7 +57730,7 @@
     method public deprecated java.lang.String toLocaleString();
   }
 
-  public abstract interface Deque implements java.util.Queue {
+  public abstract interface Deque<E> implements java.util.Queue {
     method public abstract boolean add(E);
     method public abstract void addFirst(E);
     method public abstract void addLast(E);
@@ -57757,7 +57760,7 @@
     method public abstract int size();
   }
 
-  public abstract class Dictionary {
+  public abstract class Dictionary<K, V> {
     ctor public Dictionary();
     method public abstract java.util.Enumeration<V> elements();
     method public abstract V get(java.lang.Object);
@@ -57788,7 +57791,7 @@
     ctor public EmptyStackException();
   }
 
-  public class EnumMap extends java.util.AbstractMap implements java.lang.Cloneable java.io.Serializable {
+  public class EnumMap<K extends java.lang.Enum<K>, V> extends java.util.AbstractMap implements java.lang.Cloneable java.io.Serializable {
     ctor public EnumMap(java.lang.Class<K>);
     ctor public EnumMap(java.util.EnumMap<K, ? extends V>);
     ctor public EnumMap(java.util.Map<K, ? extends V>);
@@ -57796,23 +57799,23 @@
     method public java.util.Set<java.util.Map.Entry<K, V>> entrySet();
   }
 
-  public abstract class EnumSet extends java.util.AbstractSet implements java.lang.Cloneable java.io.Serializable {
-    method public static java.util.EnumSet<E> allOf(java.lang.Class<E>);
+  public abstract class EnumSet<E extends java.lang.Enum<E>> extends java.util.AbstractSet implements java.lang.Cloneable java.io.Serializable {
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> allOf(java.lang.Class<E>);
     method public java.util.EnumSet<E> clone();
-    method public static java.util.EnumSet<E> complementOf(java.util.EnumSet<E>);
-    method public static java.util.EnumSet<E> copyOf(java.util.EnumSet<E>);
-    method public static java.util.EnumSet<E> copyOf(java.util.Collection<E>);
-    method public static java.util.EnumSet<E> noneOf(java.lang.Class<E>);
-    method public static java.util.EnumSet<E> of(E);
-    method public static java.util.EnumSet<E> of(E, E);
-    method public static java.util.EnumSet<E> of(E, E, E);
-    method public static java.util.EnumSet<E> of(E, E, E, E);
-    method public static java.util.EnumSet<E> of(E, E, E, E, E);
-    method public static java.util.EnumSet<E> of(E, E...);
-    method public static java.util.EnumSet<E> range(E, E);
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> complementOf(java.util.EnumSet<E>);
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> copyOf(java.util.EnumSet<E>);
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> copyOf(java.util.Collection<E>);
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> noneOf(java.lang.Class<E>);
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> of(E);
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> of(E, E);
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> of(E, E, E);
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> of(E, E, E, E);
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> of(E, E, E, E, E);
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> of(E, E...);
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> range(E, E);
   }
 
-  public abstract interface Enumeration {
+  public abstract interface Enumeration<E> {
     method public abstract boolean hasMoreElements();
     method public abstract E nextElement();
   }
@@ -57820,7 +57823,7 @@
   public abstract interface EventListener {
   }
 
-  public abstract class EventListenerProxy implements java.util.EventListener {
+  public abstract class EventListenerProxy<T extends java.util.EventListener> implements java.util.EventListener {
     ctor public EventListenerProxy(T);
     method public T getListener();
   }
@@ -57906,7 +57909,7 @@
     field public static final int BC = 0; // 0x0
   }
 
-  public class HashMap extends java.util.AbstractMap implements java.lang.Cloneable java.util.Map java.io.Serializable {
+  public class HashMap<K, V> extends java.util.AbstractMap implements java.lang.Cloneable java.util.Map java.io.Serializable {
     ctor public HashMap(int, float);
     ctor public HashMap(int);
     ctor public HashMap();
@@ -57918,7 +57921,7 @@
     method public void replaceAll(java.util.function.BiFunction<? super K, ? super V, ? extends V>);
   }
 
-  public class HashSet extends java.util.AbstractSet implements java.lang.Cloneable java.io.Serializable java.util.Set {
+  public class HashSet<E> extends java.util.AbstractSet implements java.lang.Cloneable java.io.Serializable java.util.Set {
     ctor public HashSet();
     ctor public HashSet(java.util.Collection<? extends E>);
     ctor public HashSet(int, float);
@@ -57929,7 +57932,7 @@
     method public java.util.Spliterator<E> spliterator();
   }
 
-  public class Hashtable extends java.util.Dictionary implements java.lang.Cloneable java.util.Map java.io.Serializable {
+  public class Hashtable<K, V> extends java.util.Dictionary implements java.lang.Cloneable java.util.Map java.io.Serializable {
     ctor public Hashtable(int, float);
     ctor public Hashtable(int);
     ctor public Hashtable();
@@ -57964,7 +57967,7 @@
     method public java.util.Collection<V> values();
   }
 
-  public class IdentityHashMap extends java.util.AbstractMap implements java.lang.Cloneable java.util.Map java.io.Serializable {
+  public class IdentityHashMap<K, V> extends java.util.AbstractMap implements java.lang.Cloneable java.util.Map java.io.Serializable {
     ctor public IdentityHashMap();
     ctor public IdentityHashMap(int);
     ctor public IdentityHashMap(java.util.Map<? extends K, ? extends V>);
@@ -58031,14 +58034,14 @@
     ctor public InvalidPropertiesFormatException(java.lang.String);
   }
 
-  public abstract interface Iterator {
+  public abstract interface Iterator<E> {
     method public default void forEachRemaining(java.util.function.Consumer<? super E>);
     method public abstract boolean hasNext();
     method public abstract E next();
     method public default void remove();
   }
 
-  public class LinkedHashMap extends java.util.HashMap implements java.util.Map {
+  public class LinkedHashMap<K, V> extends java.util.HashMap implements java.util.Map {
     ctor public LinkedHashMap(int, float);
     ctor public LinkedHashMap(int);
     ctor public LinkedHashMap();
@@ -58047,14 +58050,14 @@
     method protected boolean removeEldestEntry(java.util.Map.Entry<K, V>);
   }
 
-  public class LinkedHashSet extends java.util.HashSet implements java.lang.Cloneable java.io.Serializable java.util.Set {
+  public class LinkedHashSet<E> extends java.util.HashSet implements java.lang.Cloneable java.io.Serializable java.util.Set {
     ctor public LinkedHashSet(int, float);
     ctor public LinkedHashSet(int);
     ctor public LinkedHashSet();
     ctor public LinkedHashSet(java.util.Collection<? extends E>);
   }
 
-  public class LinkedList extends java.util.AbstractSequentialList implements java.lang.Cloneable java.util.Deque java.util.List java.io.Serializable {
+  public class LinkedList<E> extends java.util.AbstractSequentialList implements java.lang.Cloneable java.util.Deque java.util.List java.io.Serializable {
     ctor public LinkedList();
     ctor public LinkedList(java.util.Collection<? extends E>);
     method public void addFirst(E);
@@ -58085,7 +58088,7 @@
     method public java.util.Spliterator<E> spliterator();
   }
 
-  public abstract interface List implements java.util.Collection {
+  public abstract interface List<E> implements java.util.Collection {
     method public abstract boolean add(E);
     method public abstract void add(int, E);
     method public abstract boolean addAll(java.util.Collection<? extends E>);
@@ -58112,10 +58115,10 @@
     method public default void sort(java.util.Comparator<? super E>);
     method public abstract java.util.List<E> subList(int, int);
     method public abstract java.lang.Object[] toArray();
-    method public abstract T[] toArray(T[]);
+    method public abstract <T> T[] toArray(T[]);
   }
 
-  public abstract interface ListIterator implements java.util.Iterator {
+  public abstract interface ListIterator<E> implements java.util.Iterator {
     method public abstract void add(E);
     method public abstract boolean hasNext();
     method public abstract boolean hasPrevious();
@@ -58232,7 +58235,7 @@
     method public final long getSum();
   }
 
-  public abstract interface Map {
+  public abstract interface Map<K, V> {
     method public abstract void clear();
     method public default V compute(K, java.util.function.BiFunction<? super K, ? super V, ? extends V>);
     method public default V computeIfAbsent(K, java.util.function.Function<? super K, ? extends V>);
@@ -58260,11 +58263,11 @@
     method public abstract java.util.Collection<V> values();
   }
 
-  public static abstract interface Map.Entry {
-    method public static java.util.Comparator<java.util.Map.Entry<K, V>> comparingByKey();
-    method public static java.util.Comparator<java.util.Map.Entry<K, V>> comparingByKey(java.util.Comparator<? super K>);
-    method public static java.util.Comparator<java.util.Map.Entry<K, V>> comparingByValue();
-    method public static java.util.Comparator<java.util.Map.Entry<K, V>> comparingByValue(java.util.Comparator<? super V>);
+  public static abstract interface Map.Entry<K, V> {
+    method public static <K extends java.lang.Comparable<? super K>, V> java.util.Comparator<java.util.Map.Entry<K, V>> comparingByKey();
+    method public static <K, V> java.util.Comparator<java.util.Map.Entry<K, V>> comparingByKey(java.util.Comparator<? super K>);
+    method public static <K, V extends java.lang.Comparable<? super V>> java.util.Comparator<java.util.Map.Entry<K, V>> comparingByValue();
+    method public static <K, V> java.util.Comparator<java.util.Map.Entry<K, V>> comparingByValue(java.util.Comparator<? super V>);
     method public abstract boolean equals(java.lang.Object);
     method public abstract K getKey();
     method public abstract V getValue();
@@ -58288,7 +58291,7 @@
     method public java.lang.String getKey();
   }
 
-  public abstract interface NavigableMap implements java.util.SortedMap {
+  public abstract interface NavigableMap<K, V> implements java.util.SortedMap {
     method public abstract java.util.Map.Entry<K, V> ceilingEntry(K);
     method public abstract K ceilingKey(K);
     method public abstract java.util.NavigableSet<K> descendingKeySet();
@@ -58312,7 +58315,7 @@
     method public abstract java.util.SortedMap<K, V> tailMap(K);
   }
 
-  public abstract interface NavigableSet implements java.util.SortedSet {
+  public abstract interface NavigableSet<E> implements java.util.SortedSet {
     method public abstract E ceiling(E);
     method public abstract java.util.Iterator<E> descendingIterator();
     method public abstract java.util.NavigableSet<E> descendingSet();
@@ -58336,16 +58339,16 @@
   }
 
   public final class Objects {
-    method public static int compare(T, T, java.util.Comparator<? super T>);
+    method public static <T> int compare(T, T, java.util.Comparator<? super T>);
     method public static boolean deepEquals(java.lang.Object, java.lang.Object);
     method public static boolean equals(java.lang.Object, java.lang.Object);
     method public static int hash(java.lang.Object...);
     method public static int hashCode(java.lang.Object);
     method public static boolean isNull(java.lang.Object);
     method public static boolean nonNull(java.lang.Object);
-    method public static T requireNonNull(T);
-    method public static T requireNonNull(T, java.lang.String);
-    method public static T requireNonNull(T, java.util.function.Supplier<java.lang.String>);
+    method public static <T> T requireNonNull(T);
+    method public static <T> T requireNonNull(T, java.lang.String);
+    method public static <T> T requireNonNull(T, java.util.function.Supplier<java.lang.String>);
     method public static java.lang.String toString(java.lang.Object);
     method public static java.lang.String toString(java.lang.Object, java.lang.String);
   }
@@ -58367,19 +58370,19 @@
     method public abstract void update(java.util.Observable, java.lang.Object);
   }
 
-  public final class Optional {
-    method public static java.util.Optional<T> empty();
+  public final class Optional<T> {
+    method public static <T> java.util.Optional<T> empty();
     method public java.util.Optional<T> filter(java.util.function.Predicate<? super T>);
-    method public java.util.Optional<U> flatMap(java.util.function.Function<? super T, java.util.Optional<U>>);
+    method public <U> java.util.Optional<U> flatMap(java.util.function.Function<? super T, java.util.Optional<U>>);
     method public T get();
     method public void ifPresent(java.util.function.Consumer<? super T>);
     method public boolean isPresent();
-    method public java.util.Optional<U> map(java.util.function.Function<? super T, ? extends U>);
-    method public static java.util.Optional<T> of(T);
-    method public static java.util.Optional<T> ofNullable(T);
+    method public <U> java.util.Optional<U> map(java.util.function.Function<? super T, ? extends U>);
+    method public static <T> java.util.Optional<T> of(T);
+    method public static <T> java.util.Optional<T> ofNullable(T);
     method public T orElse(T);
     method public T orElseGet(java.util.function.Supplier<? extends T>);
-    method public T orElseThrow(java.util.function.Supplier<? extends X>) throws java.lang.Throwable;
+    method public <X extends java.lang.Throwable> T orElseThrow(java.util.function.Supplier<? extends X>) throws java.lang.Throwable;
   }
 
   public final class OptionalDouble {
@@ -58390,7 +58393,7 @@
     method public static java.util.OptionalDouble of(double);
     method public double orElse(double);
     method public double orElseGet(java.util.function.DoubleSupplier);
-    method public double orElseThrow(java.util.function.Supplier<X>) throws java.lang.Throwable;
+    method public <X extends java.lang.Throwable> double orElseThrow(java.util.function.Supplier<X>) throws java.lang.Throwable;
   }
 
   public final class OptionalInt {
@@ -58401,7 +58404,7 @@
     method public static java.util.OptionalInt of(int);
     method public int orElse(int);
     method public int orElseGet(java.util.function.IntSupplier);
-    method public int orElseThrow(java.util.function.Supplier<X>) throws java.lang.Throwable;
+    method public <X extends java.lang.Throwable> int orElseThrow(java.util.function.Supplier<X>) throws java.lang.Throwable;
   }
 
   public final class OptionalLong {
@@ -58412,10 +58415,10 @@
     method public static java.util.OptionalLong of(long);
     method public long orElse(long);
     method public long orElseGet(java.util.function.LongSupplier);
-    method public long orElseThrow(java.util.function.Supplier<X>) throws java.lang.Throwable;
+    method public <X extends java.lang.Throwable> long orElseThrow(java.util.function.Supplier<X>) throws java.lang.Throwable;
   }
 
-  public abstract interface PrimitiveIterator implements java.util.Iterator {
+  public abstract interface PrimitiveIterator<T, T_CONS> implements java.util.Iterator {
     method public abstract void forEachRemaining(T_CONS);
   }
 
@@ -58440,7 +58443,7 @@
     method public abstract long nextLong();
   }
 
-  public class PriorityQueue extends java.util.AbstractQueue implements java.io.Serializable {
+  public class PriorityQueue<E> extends java.util.AbstractQueue implements java.io.Serializable {
     ctor public PriorityQueue();
     ctor public PriorityQueue(int);
     ctor public PriorityQueue(java.util.Comparator<? super E>);
@@ -58489,7 +58492,7 @@
     method public java.lang.Object handleGetObject(java.lang.String);
   }
 
-  public abstract interface Queue implements java.util.Collection {
+  public abstract interface Queue<E> implements java.util.Collection {
     method public abstract boolean add(E);
     method public abstract E element();
     method public abstract boolean offer(E);
@@ -58639,15 +58642,15 @@
     ctor public ServiceConfigurationError(java.lang.String, java.lang.Throwable);
   }
 
-  public final class ServiceLoader implements java.lang.Iterable {
+  public final class ServiceLoader<S> implements java.lang.Iterable {
     method public java.util.Iterator<S> iterator();
-    method public static java.util.ServiceLoader<S> load(java.lang.Class<S>, java.lang.ClassLoader);
-    method public static java.util.ServiceLoader<S> load(java.lang.Class<S>);
-    method public static java.util.ServiceLoader<S> loadInstalled(java.lang.Class<S>);
+    method public static <S> java.util.ServiceLoader<S> load(java.lang.Class<S>, java.lang.ClassLoader);
+    method public static <S> java.util.ServiceLoader<S> load(java.lang.Class<S>);
+    method public static <S> java.util.ServiceLoader<S> loadInstalled(java.lang.Class<S>);
     method public void reload();
   }
 
-  public abstract interface Set implements java.util.Collection {
+  public abstract interface Set<E> implements java.util.Collection {
     method public abstract boolean add(E);
     method public abstract boolean addAll(java.util.Collection<? extends E>);
     method public abstract void clear();
@@ -58662,7 +58665,7 @@
     method public abstract boolean retainAll(java.util.Collection<?>);
     method public abstract int size();
     method public abstract java.lang.Object[] toArray();
-    method public abstract T[] toArray(T[]);
+    method public abstract <T> T[] toArray(T[]);
   }
 
   public class SimpleTimeZone extends java.util.TimeZone {
@@ -58688,7 +58691,7 @@
     field public static final int WALL_TIME = 0; // 0x0
   }
 
-  public abstract interface SortedMap implements java.util.Map {
+  public abstract interface SortedMap<K, V> implements java.util.Map {
     method public abstract java.util.Comparator<? super K> comparator();
     method public abstract java.util.Set<java.util.Map.Entry<K, V>> entrySet();
     method public abstract K firstKey();
@@ -58700,7 +58703,7 @@
     method public abstract java.util.Collection<V> values();
   }
 
-  public abstract interface SortedSet implements java.util.Set {
+  public abstract interface SortedSet<E> implements java.util.Set {
     method public abstract java.util.Comparator<? super E> comparator();
     method public abstract E first();
     method public abstract java.util.SortedSet<E> headSet(E);
@@ -58709,7 +58712,7 @@
     method public abstract java.util.SortedSet<E> tailSet(E);
   }
 
-  public abstract interface Spliterator {
+  public abstract interface Spliterator<T> {
     method public abstract int characteristics();
     method public abstract long estimateSize();
     method public default void forEachRemaining(java.util.function.Consumer<? super T>);
@@ -58752,7 +58755,7 @@
     method public abstract java.util.Spliterator.OfLong trySplit();
   }
 
-  public static abstract interface Spliterator.OfPrimitive implements java.util.Spliterator {
+  public static abstract interface Spliterator.OfPrimitive<T, T_CONS, T_SPLITR extends java.util.Spliterator.OfPrimitive<T, T_CONS, T_SPLITR>> implements java.util.Spliterator {
     method public default void forEachRemaining(T_CONS);
     method public abstract boolean tryAdvance(T_CONS);
     method public abstract T_SPLITR trySplit();
@@ -58762,25 +58765,25 @@
     method public static java.util.Spliterator.OfDouble emptyDoubleSpliterator();
     method public static java.util.Spliterator.OfInt emptyIntSpliterator();
     method public static java.util.Spliterator.OfLong emptyLongSpliterator();
-    method public static java.util.Spliterator<T> emptySpliterator();
-    method public static java.util.Iterator<T> iterator(java.util.Spliterator<? extends T>);
+    method public static <T> java.util.Spliterator<T> emptySpliterator();
+    method public static <T> java.util.Iterator<T> iterator(java.util.Spliterator<? extends T>);
     method public static java.util.PrimitiveIterator.OfInt iterator(java.util.Spliterator.OfInt);
     method public static java.util.PrimitiveIterator.OfLong iterator(java.util.Spliterator.OfLong);
     method public static java.util.PrimitiveIterator.OfDouble iterator(java.util.Spliterator.OfDouble);
-    method public static java.util.Spliterator<T> spliterator(java.lang.Object[], int);
-    method public static java.util.Spliterator<T> spliterator(java.lang.Object[], int, int, int);
+    method public static <T> java.util.Spliterator<T> spliterator(java.lang.Object[], int);
+    method public static <T> java.util.Spliterator<T> spliterator(java.lang.Object[], int, int, int);
     method public static java.util.Spliterator.OfInt spliterator(int[], int);
     method public static java.util.Spliterator.OfInt spliterator(int[], int, int, int);
     method public static java.util.Spliterator.OfLong spliterator(long[], int);
     method public static java.util.Spliterator.OfLong spliterator(long[], int, int, int);
     method public static java.util.Spliterator.OfDouble spliterator(double[], int);
     method public static java.util.Spliterator.OfDouble spliterator(double[], int, int, int);
-    method public static java.util.Spliterator<T> spliterator(java.util.Collection<? extends T>, int);
-    method public static java.util.Spliterator<T> spliterator(java.util.Iterator<? extends T>, long, int);
+    method public static <T> java.util.Spliterator<T> spliterator(java.util.Collection<? extends T>, int);
+    method public static <T> java.util.Spliterator<T> spliterator(java.util.Iterator<? extends T>, long, int);
     method public static java.util.Spliterator.OfInt spliterator(java.util.PrimitiveIterator.OfInt, long, int);
     method public static java.util.Spliterator.OfLong spliterator(java.util.PrimitiveIterator.OfLong, long, int);
     method public static java.util.Spliterator.OfDouble spliterator(java.util.PrimitiveIterator.OfDouble, long, int);
-    method public static java.util.Spliterator<T> spliteratorUnknownSize(java.util.Iterator<? extends T>, int);
+    method public static <T> java.util.Spliterator<T> spliteratorUnknownSize(java.util.Iterator<? extends T>, int);
     method public static java.util.Spliterator.OfInt spliteratorUnknownSize(java.util.PrimitiveIterator.OfInt, int);
     method public static java.util.Spliterator.OfLong spliteratorUnknownSize(java.util.PrimitiveIterator.OfLong, int);
     method public static java.util.Spliterator.OfDouble spliteratorUnknownSize(java.util.PrimitiveIterator.OfDouble, int);
@@ -58807,7 +58810,7 @@
     method public java.util.Spliterator.OfLong trySplit();
   }
 
-  public static abstract class Spliterators.AbstractSpliterator implements java.util.Spliterator {
+  public static abstract class Spliterators.AbstractSpliterator<T> implements java.util.Spliterator {
     ctor protected Spliterators.AbstractSpliterator(long, int);
     method public int characteristics();
     method public long estimateSize();
@@ -58842,7 +58845,7 @@
     method public java.util.SplittableRandom split();
   }
 
-  public class Stack extends java.util.Vector {
+  public class Stack<E> extends java.util.Vector {
     ctor public Stack();
     method public boolean empty();
     method public synchronized E peek();
@@ -58926,7 +58929,7 @@
     ctor public TooManyListenersException(java.lang.String);
   }
 
-  public class TreeMap extends java.util.AbstractMap implements java.lang.Cloneable java.util.NavigableMap java.io.Serializable {
+  public class TreeMap<K, V> extends java.util.AbstractMap implements java.lang.Cloneable java.util.NavigableMap java.io.Serializable {
     ctor public TreeMap();
     ctor public TreeMap(java.util.Comparator<? super K>);
     ctor public TreeMap(java.util.Map<? extends K, ? extends V>);
@@ -58963,7 +58966,7 @@
     method public java.util.SortedMap<K, V> tailMap(K);
   }
 
-  public class TreeSet extends java.util.AbstractSet implements java.lang.Cloneable java.util.NavigableSet java.io.Serializable {
+  public class TreeSet<E> extends java.util.AbstractSet implements java.lang.Cloneable java.util.NavigableSet java.io.Serializable {
     ctor public TreeSet();
     ctor public TreeSet(java.util.Comparator<? super E>);
     ctor public TreeSet(java.util.Collection<? extends E>);
@@ -59016,7 +59019,7 @@
     method public java.lang.String getFlags();
   }
 
-  public class Vector extends java.util.AbstractList implements java.lang.Cloneable java.util.List java.util.RandomAccess java.io.Serializable {
+  public class Vector<E> extends java.util.AbstractList implements java.lang.Cloneable java.util.List java.util.RandomAccess java.io.Serializable {
     ctor public Vector(int, int);
     ctor public Vector(int);
     ctor public Vector();
@@ -59051,7 +59054,7 @@
     field protected java.lang.Object[] elementData;
   }
 
-  public class WeakHashMap extends java.util.AbstractMap implements java.util.Map {
+  public class WeakHashMap<K, V> extends java.util.AbstractMap implements java.util.Map {
     ctor public WeakHashMap(int, float);
     ctor public WeakHashMap(int);
     ctor public WeakHashMap();
@@ -59067,18 +59070,18 @@
 
   public abstract class AbstractExecutorService implements java.util.concurrent.ExecutorService {
     ctor public AbstractExecutorService();
-    method public java.util.List<java.util.concurrent.Future<T>> invokeAll(java.util.Collection<? extends java.util.concurrent.Callable<T>>) throws java.lang.InterruptedException;
-    method public java.util.List<java.util.concurrent.Future<T>> invokeAll(java.util.Collection<? extends java.util.concurrent.Callable<T>>, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
-    method public T invokeAny(java.util.Collection<? extends java.util.concurrent.Callable<T>>) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException;
-    method public T invokeAny(java.util.Collection<? extends java.util.concurrent.Callable<T>>, long, java.util.concurrent.TimeUnit) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException, java.util.concurrent.TimeoutException;
-    method protected java.util.concurrent.RunnableFuture<T> newTaskFor(java.lang.Runnable, T);
-    method protected java.util.concurrent.RunnableFuture<T> newTaskFor(java.util.concurrent.Callable<T>);
+    method public <T> java.util.List<java.util.concurrent.Future<T>> invokeAll(java.util.Collection<? extends java.util.concurrent.Callable<T>>) throws java.lang.InterruptedException;
+    method public <T> java.util.List<java.util.concurrent.Future<T>> invokeAll(java.util.Collection<? extends java.util.concurrent.Callable<T>>, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public <T> T invokeAny(java.util.Collection<? extends java.util.concurrent.Callable<T>>) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException;
+    method public <T> T invokeAny(java.util.Collection<? extends java.util.concurrent.Callable<T>>, long, java.util.concurrent.TimeUnit) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException, java.util.concurrent.TimeoutException;
+    method protected <T> java.util.concurrent.RunnableFuture<T> newTaskFor(java.lang.Runnable, T);
+    method protected <T> java.util.concurrent.RunnableFuture<T> newTaskFor(java.util.concurrent.Callable<T>);
     method public java.util.concurrent.Future<?> submit(java.lang.Runnable);
-    method public java.util.concurrent.Future<T> submit(java.lang.Runnable, T);
-    method public java.util.concurrent.Future<T> submit(java.util.concurrent.Callable<T>);
+    method public <T> java.util.concurrent.Future<T> submit(java.lang.Runnable, T);
+    method public <T> java.util.concurrent.Future<T> submit(java.util.concurrent.Callable<T>);
   }
 
-  public class ArrayBlockingQueue extends java.util.AbstractQueue implements java.util.concurrent.BlockingQueue java.io.Serializable {
+  public class ArrayBlockingQueue<E> extends java.util.AbstractQueue implements java.util.concurrent.BlockingQueue java.io.Serializable {
     ctor public ArrayBlockingQueue(int);
     ctor public ArrayBlockingQueue(int, boolean);
     ctor public ArrayBlockingQueue(int, boolean, java.util.Collection<? extends E>);
@@ -59097,7 +59100,7 @@
     method public E take() throws java.lang.InterruptedException;
   }
 
-  public abstract interface BlockingDeque implements java.util.concurrent.BlockingQueue java.util.Deque {
+  public abstract interface BlockingDeque<E> implements java.util.concurrent.BlockingQueue java.util.Deque {
     method public abstract boolean add(E);
     method public abstract void addFirst(E);
     method public abstract void addLast(E);
@@ -59129,7 +59132,7 @@
     method public abstract E takeLast() throws java.lang.InterruptedException;
   }
 
-  public abstract interface BlockingQueue implements java.util.Queue {
+  public abstract interface BlockingQueue<E> implements java.util.Queue {
     method public abstract boolean add(E);
     method public abstract boolean contains(java.lang.Object);
     method public abstract int drainTo(java.util.Collection<? super E>);
@@ -59148,7 +59151,7 @@
     ctor public BrokenBarrierException(java.lang.String);
   }
 
-  public abstract interface Callable {
+  public abstract interface Callable<V> {
     method public abstract V call() throws java.lang.Exception;
   }
 
@@ -59157,28 +59160,28 @@
     ctor public CancellationException(java.lang.String);
   }
 
-  public class CompletableFuture implements java.util.concurrent.CompletionStage java.util.concurrent.Future {
+  public class CompletableFuture<T> implements java.util.concurrent.CompletionStage java.util.concurrent.Future {
     ctor public CompletableFuture();
     method public java.util.concurrent.CompletableFuture<java.lang.Void> acceptEither(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Consumer<? super T>);
     method public java.util.concurrent.CompletableFuture<java.lang.Void> acceptEitherAsync(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Consumer<? super T>);
     method public java.util.concurrent.CompletableFuture<java.lang.Void> acceptEitherAsync(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Consumer<? super T>, java.util.concurrent.Executor);
     method public static java.util.concurrent.CompletableFuture<java.lang.Void> allOf(java.util.concurrent.CompletableFuture<?>...);
     method public static java.util.concurrent.CompletableFuture<java.lang.Object> anyOf(java.util.concurrent.CompletableFuture<?>...);
-    method public java.util.concurrent.CompletableFuture<U> applyToEither(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Function<? super T, U>);
-    method public java.util.concurrent.CompletableFuture<U> applyToEitherAsync(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Function<? super T, U>);
-    method public java.util.concurrent.CompletableFuture<U> applyToEitherAsync(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Function<? super T, U>, java.util.concurrent.Executor);
+    method public <U> java.util.concurrent.CompletableFuture<U> applyToEither(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Function<? super T, U>);
+    method public <U> java.util.concurrent.CompletableFuture<U> applyToEitherAsync(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Function<? super T, U>);
+    method public <U> java.util.concurrent.CompletableFuture<U> applyToEitherAsync(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Function<? super T, U>, java.util.concurrent.Executor);
     method public boolean cancel(boolean);
     method public boolean complete(T);
     method public boolean completeExceptionally(java.lang.Throwable);
-    method public static java.util.concurrent.CompletableFuture<U> completedFuture(U);
+    method public static <U> java.util.concurrent.CompletableFuture<U> completedFuture(U);
     method public java.util.concurrent.CompletableFuture<T> exceptionally(java.util.function.Function<java.lang.Throwable, ? extends T>);
     method public T get() throws java.util.concurrent.ExecutionException, java.lang.InterruptedException;
     method public T get(long, java.util.concurrent.TimeUnit) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException, java.util.concurrent.TimeoutException;
     method public T getNow(T);
     method public int getNumberOfDependents();
-    method public java.util.concurrent.CompletableFuture<U> handle(java.util.function.BiFunction<? super T, java.lang.Throwable, ? extends U>);
-    method public java.util.concurrent.CompletableFuture<U> handleAsync(java.util.function.BiFunction<? super T, java.lang.Throwable, ? extends U>);
-    method public java.util.concurrent.CompletableFuture<U> handleAsync(java.util.function.BiFunction<? super T, java.lang.Throwable, ? extends U>, java.util.concurrent.Executor);
+    method public <U> java.util.concurrent.CompletableFuture<U> handle(java.util.function.BiFunction<? super T, java.lang.Throwable, ? extends U>);
+    method public <U> java.util.concurrent.CompletableFuture<U> handleAsync(java.util.function.BiFunction<? super T, java.lang.Throwable, ? extends U>);
+    method public <U> java.util.concurrent.CompletableFuture<U> handleAsync(java.util.function.BiFunction<? super T, java.lang.Throwable, ? extends U>, java.util.concurrent.Executor);
     method public boolean isCancelled();
     method public boolean isCompletedExceptionally();
     method public boolean isDone();
@@ -59193,23 +59196,23 @@
     method public java.util.concurrent.CompletableFuture<java.lang.Void> runAfterEitherAsync(java.util.concurrent.CompletionStage<?>, java.lang.Runnable, java.util.concurrent.Executor);
     method public static java.util.concurrent.CompletableFuture<java.lang.Void> runAsync(java.lang.Runnable);
     method public static java.util.concurrent.CompletableFuture<java.lang.Void> runAsync(java.lang.Runnable, java.util.concurrent.Executor);
-    method public static java.util.concurrent.CompletableFuture<U> supplyAsync(java.util.function.Supplier<U>);
-    method public static java.util.concurrent.CompletableFuture<U> supplyAsync(java.util.function.Supplier<U>, java.util.concurrent.Executor);
+    method public static <U> java.util.concurrent.CompletableFuture<U> supplyAsync(java.util.function.Supplier<U>);
+    method public static <U> java.util.concurrent.CompletableFuture<U> supplyAsync(java.util.function.Supplier<U>, java.util.concurrent.Executor);
     method public java.util.concurrent.CompletableFuture<java.lang.Void> thenAccept(java.util.function.Consumer<? super T>);
     method public java.util.concurrent.CompletableFuture<java.lang.Void> thenAcceptAsync(java.util.function.Consumer<? super T>);
     method public java.util.concurrent.CompletableFuture<java.lang.Void> thenAcceptAsync(java.util.function.Consumer<? super T>, java.util.concurrent.Executor);
-    method public java.util.concurrent.CompletableFuture<java.lang.Void> thenAcceptBoth(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiConsumer<? super T, ? super U>);
-    method public java.util.concurrent.CompletableFuture<java.lang.Void> thenAcceptBothAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiConsumer<? super T, ? super U>);
-    method public java.util.concurrent.CompletableFuture<java.lang.Void> thenAcceptBothAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiConsumer<? super T, ? super U>, java.util.concurrent.Executor);
-    method public java.util.concurrent.CompletableFuture<U> thenApply(java.util.function.Function<? super T, ? extends U>);
-    method public java.util.concurrent.CompletableFuture<U> thenApplyAsync(java.util.function.Function<? super T, ? extends U>);
-    method public java.util.concurrent.CompletableFuture<U> thenApplyAsync(java.util.function.Function<? super T, ? extends U>, java.util.concurrent.Executor);
-    method public java.util.concurrent.CompletableFuture<V> thenCombine(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiFunction<? super T, ? super U, ? extends V>);
-    method public java.util.concurrent.CompletableFuture<V> thenCombineAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiFunction<? super T, ? super U, ? extends V>);
-    method public java.util.concurrent.CompletableFuture<V> thenCombineAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiFunction<? super T, ? super U, ? extends V>, java.util.concurrent.Executor);
-    method public java.util.concurrent.CompletableFuture<U> thenCompose(java.util.function.Function<? super T, ? extends java.util.concurrent.CompletionStage<U>>);
-    method public java.util.concurrent.CompletableFuture<U> thenComposeAsync(java.util.function.Function<? super T, ? extends java.util.concurrent.CompletionStage<U>>);
-    method public java.util.concurrent.CompletableFuture<U> thenComposeAsync(java.util.function.Function<? super T, ? extends java.util.concurrent.CompletionStage<U>>, java.util.concurrent.Executor);
+    method public <U> java.util.concurrent.CompletableFuture<java.lang.Void> thenAcceptBoth(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiConsumer<? super T, ? super U>);
+    method public <U> java.util.concurrent.CompletableFuture<java.lang.Void> thenAcceptBothAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiConsumer<? super T, ? super U>);
+    method public <U> java.util.concurrent.CompletableFuture<java.lang.Void> thenAcceptBothAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiConsumer<? super T, ? super U>, java.util.concurrent.Executor);
+    method public <U> java.util.concurrent.CompletableFuture<U> thenApply(java.util.function.Function<? super T, ? extends U>);
+    method public <U> java.util.concurrent.CompletableFuture<U> thenApplyAsync(java.util.function.Function<? super T, ? extends U>);
+    method public <U> java.util.concurrent.CompletableFuture<U> thenApplyAsync(java.util.function.Function<? super T, ? extends U>, java.util.concurrent.Executor);
+    method public <U, V> java.util.concurrent.CompletableFuture<V> thenCombine(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiFunction<? super T, ? super U, ? extends V>);
+    method public <U, V> java.util.concurrent.CompletableFuture<V> thenCombineAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiFunction<? super T, ? super U, ? extends V>);
+    method public <U, V> java.util.concurrent.CompletableFuture<V> thenCombineAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiFunction<? super T, ? super U, ? extends V>, java.util.concurrent.Executor);
+    method public <U> java.util.concurrent.CompletableFuture<U> thenCompose(java.util.function.Function<? super T, ? extends java.util.concurrent.CompletionStage<U>>);
+    method public <U> java.util.concurrent.CompletableFuture<U> thenComposeAsync(java.util.function.Function<? super T, ? extends java.util.concurrent.CompletionStage<U>>);
+    method public <U> java.util.concurrent.CompletableFuture<U> thenComposeAsync(java.util.function.Function<? super T, ? extends java.util.concurrent.CompletionStage<U>>, java.util.concurrent.Executor);
     method public java.util.concurrent.CompletableFuture<java.lang.Void> thenRun(java.lang.Runnable);
     method public java.util.concurrent.CompletableFuture<java.lang.Void> thenRunAsync(java.lang.Runnable);
     method public java.util.concurrent.CompletableFuture<java.lang.Void> thenRunAsync(java.lang.Runnable, java.util.concurrent.Executor);
@@ -59229,7 +59232,7 @@
     ctor public CompletionException(java.lang.Throwable);
   }
 
-  public abstract interface CompletionService {
+  public abstract interface CompletionService<V> {
     method public abstract java.util.concurrent.Future<V> poll();
     method public abstract java.util.concurrent.Future<V> poll(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
     method public abstract java.util.concurrent.Future<V> submit(java.util.concurrent.Callable<V>);
@@ -59237,17 +59240,17 @@
     method public abstract java.util.concurrent.Future<V> take() throws java.lang.InterruptedException;
   }
 
-  public abstract interface CompletionStage {
+  public abstract interface CompletionStage<T> {
     method public abstract java.util.concurrent.CompletionStage<java.lang.Void> acceptEither(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Consumer<? super T>);
     method public abstract java.util.concurrent.CompletionStage<java.lang.Void> acceptEitherAsync(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Consumer<? super T>);
     method public abstract java.util.concurrent.CompletionStage<java.lang.Void> acceptEitherAsync(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Consumer<? super T>, java.util.concurrent.Executor);
-    method public abstract java.util.concurrent.CompletionStage<U> applyToEither(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Function<? super T, U>);
-    method public abstract java.util.concurrent.CompletionStage<U> applyToEitherAsync(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Function<? super T, U>);
-    method public abstract java.util.concurrent.CompletionStage<U> applyToEitherAsync(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Function<? super T, U>, java.util.concurrent.Executor);
+    method public abstract <U> java.util.concurrent.CompletionStage<U> applyToEither(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Function<? super T, U>);
+    method public abstract <U> java.util.concurrent.CompletionStage<U> applyToEitherAsync(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Function<? super T, U>);
+    method public abstract <U> java.util.concurrent.CompletionStage<U> applyToEitherAsync(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Function<? super T, U>, java.util.concurrent.Executor);
     method public abstract java.util.concurrent.CompletionStage<T> exceptionally(java.util.function.Function<java.lang.Throwable, ? extends T>);
-    method public abstract java.util.concurrent.CompletionStage<U> handle(java.util.function.BiFunction<? super T, java.lang.Throwable, ? extends U>);
-    method public abstract java.util.concurrent.CompletionStage<U> handleAsync(java.util.function.BiFunction<? super T, java.lang.Throwable, ? extends U>);
-    method public abstract java.util.concurrent.CompletionStage<U> handleAsync(java.util.function.BiFunction<? super T, java.lang.Throwable, ? extends U>, java.util.concurrent.Executor);
+    method public abstract <U> java.util.concurrent.CompletionStage<U> handle(java.util.function.BiFunction<? super T, java.lang.Throwable, ? extends U>);
+    method public abstract <U> java.util.concurrent.CompletionStage<U> handleAsync(java.util.function.BiFunction<? super T, java.lang.Throwable, ? extends U>);
+    method public abstract <U> java.util.concurrent.CompletionStage<U> handleAsync(java.util.function.BiFunction<? super T, java.lang.Throwable, ? extends U>, java.util.concurrent.Executor);
     method public abstract java.util.concurrent.CompletionStage<java.lang.Void> runAfterBoth(java.util.concurrent.CompletionStage<?>, java.lang.Runnable);
     method public abstract java.util.concurrent.CompletionStage<java.lang.Void> runAfterBothAsync(java.util.concurrent.CompletionStage<?>, java.lang.Runnable);
     method public abstract java.util.concurrent.CompletionStage<java.lang.Void> runAfterBothAsync(java.util.concurrent.CompletionStage<?>, java.lang.Runnable, java.util.concurrent.Executor);
@@ -59257,18 +59260,18 @@
     method public abstract java.util.concurrent.CompletionStage<java.lang.Void> thenAccept(java.util.function.Consumer<? super T>);
     method public abstract java.util.concurrent.CompletionStage<java.lang.Void> thenAcceptAsync(java.util.function.Consumer<? super T>);
     method public abstract java.util.concurrent.CompletionStage<java.lang.Void> thenAcceptAsync(java.util.function.Consumer<? super T>, java.util.concurrent.Executor);
-    method public abstract java.util.concurrent.CompletionStage<java.lang.Void> thenAcceptBoth(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiConsumer<? super T, ? super U>);
-    method public abstract java.util.concurrent.CompletionStage<java.lang.Void> thenAcceptBothAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiConsumer<? super T, ? super U>);
-    method public abstract java.util.concurrent.CompletionStage<java.lang.Void> thenAcceptBothAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiConsumer<? super T, ? super U>, java.util.concurrent.Executor);
-    method public abstract java.util.concurrent.CompletionStage<U> thenApply(java.util.function.Function<? super T, ? extends U>);
-    method public abstract java.util.concurrent.CompletionStage<U> thenApplyAsync(java.util.function.Function<? super T, ? extends U>);
-    method public abstract java.util.concurrent.CompletionStage<U> thenApplyAsync(java.util.function.Function<? super T, ? extends U>, java.util.concurrent.Executor);
-    method public abstract java.util.concurrent.CompletionStage<V> thenCombine(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiFunction<? super T, ? super U, ? extends V>);
-    method public abstract java.util.concurrent.CompletionStage<V> thenCombineAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiFunction<? super T, ? super U, ? extends V>);
-    method public abstract java.util.concurrent.CompletionStage<V> thenCombineAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiFunction<? super T, ? super U, ? extends V>, java.util.concurrent.Executor);
-    method public abstract java.util.concurrent.CompletionStage<U> thenCompose(java.util.function.Function<? super T, ? extends java.util.concurrent.CompletionStage<U>>);
-    method public abstract java.util.concurrent.CompletionStage<U> thenComposeAsync(java.util.function.Function<? super T, ? extends java.util.concurrent.CompletionStage<U>>);
-    method public abstract java.util.concurrent.CompletionStage<U> thenComposeAsync(java.util.function.Function<? super T, ? extends java.util.concurrent.CompletionStage<U>>, java.util.concurrent.Executor);
+    method public abstract <U> java.util.concurrent.CompletionStage<java.lang.Void> thenAcceptBoth(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiConsumer<? super T, ? super U>);
+    method public abstract <U> java.util.concurrent.CompletionStage<java.lang.Void> thenAcceptBothAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiConsumer<? super T, ? super U>);
+    method public abstract <U> java.util.concurrent.CompletionStage<java.lang.Void> thenAcceptBothAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiConsumer<? super T, ? super U>, java.util.concurrent.Executor);
+    method public abstract <U> java.util.concurrent.CompletionStage<U> thenApply(java.util.function.Function<? super T, ? extends U>);
+    method public abstract <U> java.util.concurrent.CompletionStage<U> thenApplyAsync(java.util.function.Function<? super T, ? extends U>);
+    method public abstract <U> java.util.concurrent.CompletionStage<U> thenApplyAsync(java.util.function.Function<? super T, ? extends U>, java.util.concurrent.Executor);
+    method public abstract <U, V> java.util.concurrent.CompletionStage<V> thenCombine(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiFunction<? super T, ? super U, ? extends V>);
+    method public abstract <U, V> java.util.concurrent.CompletionStage<V> thenCombineAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiFunction<? super T, ? super U, ? extends V>);
+    method public abstract <U, V> java.util.concurrent.CompletionStage<V> thenCombineAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiFunction<? super T, ? super U, ? extends V>, java.util.concurrent.Executor);
+    method public abstract <U> java.util.concurrent.CompletionStage<U> thenCompose(java.util.function.Function<? super T, ? extends java.util.concurrent.CompletionStage<U>>);
+    method public abstract <U> java.util.concurrent.CompletionStage<U> thenComposeAsync(java.util.function.Function<? super T, ? extends java.util.concurrent.CompletionStage<U>>);
+    method public abstract <U> java.util.concurrent.CompletionStage<U> thenComposeAsync(java.util.function.Function<? super T, ? extends java.util.concurrent.CompletionStage<U>>, java.util.concurrent.Executor);
     method public abstract java.util.concurrent.CompletionStage<java.lang.Void> thenRun(java.lang.Runnable);
     method public abstract java.util.concurrent.CompletionStage<java.lang.Void> thenRunAsync(java.lang.Runnable);
     method public abstract java.util.concurrent.CompletionStage<java.lang.Void> thenRunAsync(java.lang.Runnable, java.util.concurrent.Executor);
@@ -59278,7 +59281,7 @@
     method public abstract java.util.concurrent.CompletionStage<T> whenCompleteAsync(java.util.function.BiConsumer<? super T, ? super java.lang.Throwable>, java.util.concurrent.Executor);
   }
 
-  public class ConcurrentHashMap extends java.util.AbstractMap implements java.util.concurrent.ConcurrentMap java.io.Serializable {
+  public class ConcurrentHashMap<K, V> extends java.util.AbstractMap implements java.util.concurrent.ConcurrentMap java.io.Serializable {
     ctor public ConcurrentHashMap();
     ctor public ConcurrentHashMap(int);
     ctor public ConcurrentHashMap(java.util.Map<? extends K, ? extends V>);
@@ -59292,29 +59295,29 @@
     method public java.util.Set<java.util.Map.Entry<K, V>> entrySet();
     method public void forEach(java.util.function.BiConsumer<? super K, ? super V>);
     method public void forEach(long, java.util.function.BiConsumer<? super K, ? super V>);
-    method public void forEach(long, java.util.function.BiFunction<? super K, ? super V, ? extends U>, java.util.function.Consumer<? super U>);
+    method public <U> void forEach(long, java.util.function.BiFunction<? super K, ? super V, ? extends U>, java.util.function.Consumer<? super U>);
     method public void forEachEntry(long, java.util.function.Consumer<? super java.util.Map.Entry<K, V>>);
-    method public void forEachEntry(long, java.util.function.Function<java.util.Map.Entry<K, V>, ? extends U>, java.util.function.Consumer<? super U>);
+    method public <U> void forEachEntry(long, java.util.function.Function<java.util.Map.Entry<K, V>, ? extends U>, java.util.function.Consumer<? super U>);
     method public void forEachKey(long, java.util.function.Consumer<? super K>);
-    method public void forEachKey(long, java.util.function.Function<? super K, ? extends U>, java.util.function.Consumer<? super U>);
+    method public <U> void forEachKey(long, java.util.function.Function<? super K, ? extends U>, java.util.function.Consumer<? super U>);
     method public void forEachValue(long, java.util.function.Consumer<? super V>);
-    method public void forEachValue(long, java.util.function.Function<? super V, ? extends U>, java.util.function.Consumer<? super U>);
+    method public <U> void forEachValue(long, java.util.function.Function<? super V, ? extends U>, java.util.function.Consumer<? super U>);
     method public V getOrDefault(java.lang.Object, V);
     method public java.util.concurrent.ConcurrentHashMap.KeySetView<K, V> keySet(V);
     method public java.util.Enumeration<K> keys();
     method public long mappingCount();
     method public V merge(K, V, java.util.function.BiFunction<? super V, ? super V, ? extends V>);
-    method public static java.util.concurrent.ConcurrentHashMap.KeySetView<K, java.lang.Boolean> newKeySet();
-    method public static java.util.concurrent.ConcurrentHashMap.KeySetView<K, java.lang.Boolean> newKeySet(int);
+    method public static <K> java.util.concurrent.ConcurrentHashMap.KeySetView<K, java.lang.Boolean> newKeySet();
+    method public static <K> java.util.concurrent.ConcurrentHashMap.KeySetView<K, java.lang.Boolean> newKeySet(int);
     method public V putIfAbsent(K, V);
-    method public U reduce(long, java.util.function.BiFunction<? super K, ? super V, ? extends U>, java.util.function.BiFunction<? super U, ? super U, ? extends U>);
+    method public <U> U reduce(long, java.util.function.BiFunction<? super K, ? super V, ? extends U>, java.util.function.BiFunction<? super U, ? super U, ? extends U>);
     method public java.util.Map.Entry<K, V> reduceEntries(long, java.util.function.BiFunction<java.util.Map.Entry<K, V>, java.util.Map.Entry<K, V>, ? extends java.util.Map.Entry<K, V>>);
-    method public U reduceEntries(long, java.util.function.Function<java.util.Map.Entry<K, V>, ? extends U>, java.util.function.BiFunction<? super U, ? super U, ? extends U>);
+    method public <U> U reduceEntries(long, java.util.function.Function<java.util.Map.Entry<K, V>, ? extends U>, java.util.function.BiFunction<? super U, ? super U, ? extends U>);
     method public double reduceEntriesToDouble(long, java.util.function.ToDoubleFunction<java.util.Map.Entry<K, V>>, double, java.util.function.DoubleBinaryOperator);
     method public int reduceEntriesToInt(long, java.util.function.ToIntFunction<java.util.Map.Entry<K, V>>, int, java.util.function.IntBinaryOperator);
     method public long reduceEntriesToLong(long, java.util.function.ToLongFunction<java.util.Map.Entry<K, V>>, long, java.util.function.LongBinaryOperator);
     method public K reduceKeys(long, java.util.function.BiFunction<? super K, ? super K, ? extends K>);
-    method public U reduceKeys(long, java.util.function.Function<? super K, ? extends U>, java.util.function.BiFunction<? super U, ? super U, ? extends U>);
+    method public <U> U reduceKeys(long, java.util.function.Function<? super K, ? extends U>, java.util.function.BiFunction<? super U, ? super U, ? extends U>);
     method public double reduceKeysToDouble(long, java.util.function.ToDoubleFunction<? super K>, double, java.util.function.DoubleBinaryOperator);
     method public int reduceKeysToInt(long, java.util.function.ToIntFunction<? super K>, int, java.util.function.IntBinaryOperator);
     method public long reduceKeysToLong(long, java.util.function.ToLongFunction<? super K>, long, java.util.function.LongBinaryOperator);
@@ -59322,7 +59325,7 @@
     method public int reduceToInt(long, java.util.function.ToIntBiFunction<? super K, ? super V>, int, java.util.function.IntBinaryOperator);
     method public long reduceToLong(long, java.util.function.ToLongBiFunction<? super K, ? super V>, long, java.util.function.LongBinaryOperator);
     method public V reduceValues(long, java.util.function.BiFunction<? super V, ? super V, ? extends V>);
-    method public U reduceValues(long, java.util.function.Function<? super V, ? extends U>, java.util.function.BiFunction<? super U, ? super U, ? extends U>);
+    method public <U> U reduceValues(long, java.util.function.Function<? super V, ? extends U>, java.util.function.BiFunction<? super U, ? super U, ? extends U>);
     method public double reduceValuesToDouble(long, java.util.function.ToDoubleFunction<? super V>, double, java.util.function.DoubleBinaryOperator);
     method public int reduceValuesToInt(long, java.util.function.ToIntFunction<? super V>, int, java.util.function.IntBinaryOperator);
     method public long reduceValuesToLong(long, java.util.function.ToLongFunction<? super V>, long, java.util.function.LongBinaryOperator);
@@ -59330,13 +59333,13 @@
     method public boolean replace(K, V, V);
     method public V replace(K, V);
     method public void replaceAll(java.util.function.BiFunction<? super K, ? super V, ? extends V>);
-    method public U search(long, java.util.function.BiFunction<? super K, ? super V, ? extends U>);
-    method public U searchEntries(long, java.util.function.Function<java.util.Map.Entry<K, V>, ? extends U>);
-    method public U searchKeys(long, java.util.function.Function<? super K, ? extends U>);
-    method public U searchValues(long, java.util.function.Function<? super V, ? extends U>);
+    method public <U> U search(long, java.util.function.BiFunction<? super K, ? super V, ? extends U>);
+    method public <U> U searchEntries(long, java.util.function.Function<java.util.Map.Entry<K, V>, ? extends U>);
+    method public <U> U searchKeys(long, java.util.function.Function<? super K, ? extends U>);
+    method public <U> U searchValues(long, java.util.function.Function<? super V, ? extends U>);
   }
 
-   static abstract class ConcurrentHashMap.CollectionView implements java.util.Collection java.io.Serializable {
+   static abstract class ConcurrentHashMap.CollectionView<K, V, E> implements java.util.Collection java.io.Serializable {
     method public final void clear();
     method public abstract boolean contains(java.lang.Object);
     method public final boolean containsAll(java.util.Collection<?>);
@@ -59348,11 +59351,11 @@
     method public final boolean retainAll(java.util.Collection<?>);
     method public final int size();
     method public final java.lang.Object[] toArray();
-    method public final T[] toArray(T[]);
+    method public final <T> T[] toArray(T[]);
     method public final java.lang.String toString();
   }
 
-  public static class ConcurrentHashMap.KeySetView extends java.util.concurrent.ConcurrentHashMap.CollectionView implements java.io.Serializable java.util.Set {
+  public static class ConcurrentHashMap.KeySetView<K, V> extends java.util.concurrent.ConcurrentHashMap.CollectionView implements java.io.Serializable java.util.Set {
     method public boolean add(K);
     method public boolean addAll(java.util.Collection<? extends K>);
     method public boolean contains(java.lang.Object);
@@ -59363,7 +59366,7 @@
     method public java.util.Spliterator<K> spliterator();
   }
 
-  public class ConcurrentLinkedDeque extends java.util.AbstractCollection implements java.util.Deque java.io.Serializable {
+  public class ConcurrentLinkedDeque<E> extends java.util.AbstractCollection implements java.util.Deque java.io.Serializable {
     ctor public ConcurrentLinkedDeque();
     ctor public ConcurrentLinkedDeque(java.util.Collection<? extends E>);
     method public void addFirst(E);
@@ -59393,7 +59396,7 @@
     method public java.util.Spliterator<E> spliterator();
   }
 
-  public class ConcurrentLinkedQueue extends java.util.AbstractQueue implements java.util.Queue java.io.Serializable {
+  public class ConcurrentLinkedQueue<E> extends java.util.AbstractQueue implements java.util.Queue java.io.Serializable {
     ctor public ConcurrentLinkedQueue();
     ctor public ConcurrentLinkedQueue(java.util.Collection<? extends E>);
     method public java.util.Iterator<E> iterator();
@@ -59404,14 +59407,14 @@
     method public java.util.Spliterator<E> spliterator();
   }
 
-  public abstract interface ConcurrentMap implements java.util.Map {
+  public abstract interface ConcurrentMap<K, V> implements java.util.Map {
     method public abstract V putIfAbsent(K, V);
     method public abstract boolean remove(java.lang.Object, java.lang.Object);
     method public abstract boolean replace(K, V, V);
     method public abstract V replace(K, V);
   }
 
-  public abstract interface ConcurrentNavigableMap implements java.util.concurrent.ConcurrentMap java.util.NavigableMap {
+  public abstract interface ConcurrentNavigableMap<K, V> implements java.util.concurrent.ConcurrentMap java.util.NavigableMap {
     method public abstract java.util.NavigableSet<K> descendingKeySet();
     method public abstract java.util.concurrent.ConcurrentNavigableMap<K, V> descendingMap();
     method public abstract java.util.concurrent.ConcurrentNavigableMap<K, V> headMap(K, boolean);
@@ -59424,7 +59427,7 @@
     method public abstract java.util.concurrent.ConcurrentNavigableMap<K, V> tailMap(K);
   }
 
-  public class ConcurrentSkipListMap extends java.util.AbstractMap implements java.lang.Cloneable java.util.concurrent.ConcurrentNavigableMap java.io.Serializable {
+  public class ConcurrentSkipListMap<K, V> extends java.util.AbstractMap implements java.lang.Cloneable java.util.concurrent.ConcurrentNavigableMap java.io.Serializable {
     ctor public ConcurrentSkipListMap();
     ctor public ConcurrentSkipListMap(java.util.Comparator<? super K>);
     ctor public ConcurrentSkipListMap(java.util.Map<? extends K, ? extends V>);
@@ -59468,7 +59471,7 @@
     method public java.util.concurrent.ConcurrentNavigableMap<K, V> tailMap(K);
   }
 
-  public class ConcurrentSkipListSet extends java.util.AbstractSet implements java.lang.Cloneable java.util.NavigableSet java.io.Serializable {
+  public class ConcurrentSkipListSet<E> extends java.util.AbstractSet implements java.lang.Cloneable java.util.NavigableSet java.io.Serializable {
     ctor public ConcurrentSkipListSet();
     ctor public ConcurrentSkipListSet(java.util.Comparator<? super E>);
     ctor public ConcurrentSkipListSet(java.util.Collection<? extends E>);
@@ -59496,7 +59499,7 @@
     method public java.util.NavigableSet<E> tailSet(E);
   }
 
-  public class CopyOnWriteArrayList implements java.lang.Cloneable java.util.List java.util.RandomAccess java.io.Serializable {
+  public class CopyOnWriteArrayList<E> implements java.lang.Cloneable java.util.List java.util.RandomAccess java.io.Serializable {
     ctor public CopyOnWriteArrayList();
     ctor public CopyOnWriteArrayList(java.util.Collection<? extends E>);
     ctor public CopyOnWriteArrayList(E[]);
@@ -59528,10 +59531,10 @@
     method public int size();
     method public java.util.List<E> subList(int, int);
     method public java.lang.Object[] toArray();
-    method public T[] toArray(T[]);
+    method public <T> T[] toArray(T[]);
   }
 
-  public class CopyOnWriteArraySet extends java.util.AbstractSet implements java.io.Serializable {
+  public class CopyOnWriteArraySet<E> extends java.util.AbstractSet implements java.io.Serializable {
     ctor public CopyOnWriteArraySet();
     ctor public CopyOnWriteArraySet(java.util.Collection<? extends E>);
     method public void forEach(java.util.function.Consumer<? super E>);
@@ -59549,7 +59552,7 @@
     method public long getCount();
   }
 
-  public abstract class CountedCompleter extends java.util.concurrent.ForkJoinTask {
+  public abstract class CountedCompleter<T> extends java.util.concurrent.ForkJoinTask {
     ctor protected CountedCompleter(java.util.concurrent.CountedCompleter<?>, int);
     ctor protected CountedCompleter(java.util.concurrent.CountedCompleter<?>);
     ctor protected CountedCompleter();
@@ -59586,7 +59589,7 @@
     method public void reset();
   }
 
-  public class DelayQueue extends java.util.AbstractQueue implements java.util.concurrent.BlockingQueue {
+  public class DelayQueue<E extends java.util.concurrent.Delayed> extends java.util.AbstractQueue implements java.util.concurrent.BlockingQueue {
     ctor public DelayQueue();
     ctor public DelayQueue(java.util.Collection<? extends E>);
     method public int drainTo(java.util.Collection<? super E>);
@@ -59607,7 +59610,7 @@
     method public abstract long getDelay(java.util.concurrent.TimeUnit);
   }
 
-  public class Exchanger {
+  public class Exchanger<V> {
     ctor public Exchanger();
     method public V exchange(V) throws java.lang.InterruptedException;
     method public V exchange(V, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException, java.util.concurrent.TimeoutException;
@@ -59624,7 +59627,7 @@
     method public abstract void execute(java.lang.Runnable);
   }
 
-  public class ExecutorCompletionService implements java.util.concurrent.CompletionService {
+  public class ExecutorCompletionService<V> implements java.util.concurrent.CompletionService {
     ctor public ExecutorCompletionService(java.util.concurrent.Executor);
     ctor public ExecutorCompletionService(java.util.concurrent.Executor, java.util.concurrent.BlockingQueue<java.util.concurrent.Future<V>>);
     method public java.util.concurrent.Future<V> poll();
@@ -59636,21 +59639,21 @@
 
   public abstract interface ExecutorService implements java.util.concurrent.Executor {
     method public abstract boolean awaitTermination(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
-    method public abstract java.util.List<java.util.concurrent.Future<T>> invokeAll(java.util.Collection<? extends java.util.concurrent.Callable<T>>) throws java.lang.InterruptedException;
-    method public abstract java.util.List<java.util.concurrent.Future<T>> invokeAll(java.util.Collection<? extends java.util.concurrent.Callable<T>>, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
-    method public abstract T invokeAny(java.util.Collection<? extends java.util.concurrent.Callable<T>>) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException;
-    method public abstract T invokeAny(java.util.Collection<? extends java.util.concurrent.Callable<T>>, long, java.util.concurrent.TimeUnit) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException, java.util.concurrent.TimeoutException;
+    method public abstract <T> java.util.List<java.util.concurrent.Future<T>> invokeAll(java.util.Collection<? extends java.util.concurrent.Callable<T>>) throws java.lang.InterruptedException;
+    method public abstract <T> java.util.List<java.util.concurrent.Future<T>> invokeAll(java.util.Collection<? extends java.util.concurrent.Callable<T>>, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public abstract <T> T invokeAny(java.util.Collection<? extends java.util.concurrent.Callable<T>>) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException;
+    method public abstract <T> T invokeAny(java.util.Collection<? extends java.util.concurrent.Callable<T>>, long, java.util.concurrent.TimeUnit) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException, java.util.concurrent.TimeoutException;
     method public abstract boolean isShutdown();
     method public abstract boolean isTerminated();
     method public abstract void shutdown();
     method public abstract java.util.List<java.lang.Runnable> shutdownNow();
-    method public abstract java.util.concurrent.Future<T> submit(java.util.concurrent.Callable<T>);
-    method public abstract java.util.concurrent.Future<T> submit(java.lang.Runnable, T);
+    method public abstract <T> java.util.concurrent.Future<T> submit(java.util.concurrent.Callable<T>);
+    method public abstract <T> java.util.concurrent.Future<T> submit(java.lang.Runnable, T);
     method public abstract java.util.concurrent.Future<?> submit(java.lang.Runnable);
   }
 
   public class Executors {
-    method public static java.util.concurrent.Callable<T> callable(java.lang.Runnable, T);
+    method public static <T> java.util.concurrent.Callable<T> callable(java.lang.Runnable, T);
     method public static java.util.concurrent.Callable<java.lang.Object> callable(java.lang.Runnable);
     method public static java.util.concurrent.Callable<java.lang.Object> callable(java.security.PrivilegedAction<?>);
     method public static java.util.concurrent.Callable<java.lang.Object> callable(java.security.PrivilegedExceptionAction<?>);
@@ -59667,8 +59670,8 @@
     method public static java.util.concurrent.ScheduledExecutorService newSingleThreadScheduledExecutor(java.util.concurrent.ThreadFactory);
     method public static java.util.concurrent.ExecutorService newWorkStealingPool(int);
     method public static java.util.concurrent.ExecutorService newWorkStealingPool();
-    method public static java.util.concurrent.Callable<T> privilegedCallable(java.util.concurrent.Callable<T>);
-    method public static java.util.concurrent.Callable<T> privilegedCallableUsingCurrentClassLoader(java.util.concurrent.Callable<T>);
+    method public static <T> java.util.concurrent.Callable<T> privilegedCallable(java.util.concurrent.Callable<T>);
+    method public static <T> java.util.concurrent.Callable<T> privilegedCallableUsingCurrentClassLoader(java.util.concurrent.Callable<T>);
     method public static java.util.concurrent.ThreadFactory privilegedThreadFactory();
     method public static java.util.concurrent.ExecutorService unconfigurableExecutorService(java.util.concurrent.ExecutorService);
     method public static java.util.concurrent.ScheduledExecutorService unconfigurableScheduledExecutorService(java.util.concurrent.ScheduledExecutorService);
@@ -59696,7 +59699,7 @@
     method public long getStealCount();
     method public java.lang.Thread.UncaughtExceptionHandler getUncaughtExceptionHandler();
     method public boolean hasQueuedSubmissions();
-    method public T invoke(java.util.concurrent.ForkJoinTask<T>);
+    method public <T> T invoke(java.util.concurrent.ForkJoinTask<T>);
     method public boolean isQuiescent();
     method public boolean isShutdown();
     method public boolean isTerminated();
@@ -59705,7 +59708,7 @@
     method protected java.util.concurrent.ForkJoinTask<?> pollSubmission();
     method public void shutdown();
     method public java.util.List<java.lang.Runnable> shutdownNow();
-    method public java.util.concurrent.ForkJoinTask<T> submit(java.util.concurrent.ForkJoinTask<T>);
+    method public <T> java.util.concurrent.ForkJoinTask<T> submit(java.util.concurrent.ForkJoinTask<T>);
     field public static final java.util.concurrent.ForkJoinPool.ForkJoinWorkerThreadFactory defaultForkJoinWorkerThreadFactory;
   }
 
@@ -59718,11 +59721,11 @@
     method public abstract boolean isReleasable();
   }
 
-  public abstract class ForkJoinTask implements java.util.concurrent.Future java.io.Serializable {
+  public abstract class ForkJoinTask<V> implements java.util.concurrent.Future java.io.Serializable {
     ctor public ForkJoinTask();
     method public static java.util.concurrent.ForkJoinTask<?> adapt(java.lang.Runnable);
-    method public static java.util.concurrent.ForkJoinTask<T> adapt(java.lang.Runnable, T);
-    method public static java.util.concurrent.ForkJoinTask<T> adapt(java.util.concurrent.Callable<? extends T>);
+    method public static <T> java.util.concurrent.ForkJoinTask<T> adapt(java.lang.Runnable, T);
+    method public static <T> java.util.concurrent.ForkJoinTask<T> adapt(java.util.concurrent.Callable<? extends T>);
     method public boolean cancel(boolean);
     method public final boolean compareAndSetForkJoinTaskTag(short, short);
     method public void complete(V);
@@ -59742,7 +59745,7 @@
     method public final V invoke();
     method public static void invokeAll(java.util.concurrent.ForkJoinTask<?>, java.util.concurrent.ForkJoinTask<?>);
     method public static void invokeAll(java.util.concurrent.ForkJoinTask<?>...);
-    method public static java.util.Collection<T> invokeAll(java.util.Collection<T>);
+    method public static <T extends java.util.concurrent.ForkJoinTask<?>> java.util.Collection<T> invokeAll(java.util.Collection<T>);
     method public final boolean isCancelled();
     method public final boolean isCompletedAbnormally();
     method public final boolean isCompletedNormally();
@@ -59768,7 +59771,7 @@
     method protected void onTermination(java.lang.Throwable);
   }
 
-  public abstract interface Future {
+  public abstract interface Future<V> {
     method public abstract boolean cancel(boolean);
     method public abstract V get() throws java.util.concurrent.ExecutionException, java.lang.InterruptedException;
     method public abstract V get(long, java.util.concurrent.TimeUnit) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException, java.util.concurrent.TimeoutException;
@@ -59776,7 +59779,7 @@
     method public abstract boolean isDone();
   }
 
-  public class FutureTask implements java.util.concurrent.RunnableFuture {
+  public class FutureTask<V> implements java.util.concurrent.RunnableFuture {
     ctor public FutureTask(java.util.concurrent.Callable<V>);
     ctor public FutureTask(java.lang.Runnable, V);
     method public boolean cancel(boolean);
@@ -59791,7 +59794,7 @@
     method protected void setException(java.lang.Throwable);
   }
 
-  public class LinkedBlockingDeque extends java.util.AbstractQueue implements java.util.concurrent.BlockingDeque java.io.Serializable {
+  public class LinkedBlockingDeque<E> extends java.util.AbstractQueue implements java.util.concurrent.BlockingDeque java.io.Serializable {
     ctor public LinkedBlockingDeque();
     ctor public LinkedBlockingDeque(int);
     ctor public LinkedBlockingDeque(java.util.Collection<? extends E>);
@@ -59835,7 +59838,7 @@
     method public E takeLast() throws java.lang.InterruptedException;
   }
 
-  public class LinkedBlockingQueue extends java.util.AbstractQueue implements java.util.concurrent.BlockingQueue java.io.Serializable {
+  public class LinkedBlockingQueue<E> extends java.util.AbstractQueue implements java.util.concurrent.BlockingQueue java.io.Serializable {
     ctor public LinkedBlockingQueue();
     ctor public LinkedBlockingQueue(int);
     ctor public LinkedBlockingQueue(java.util.Collection<? extends E>);
@@ -59854,7 +59857,7 @@
     method public E take() throws java.lang.InterruptedException;
   }
 
-  public class LinkedTransferQueue extends java.util.AbstractQueue implements java.io.Serializable java.util.concurrent.TransferQueue {
+  public class LinkedTransferQueue<E> extends java.util.AbstractQueue implements java.io.Serializable java.util.concurrent.TransferQueue {
     ctor public LinkedTransferQueue();
     ctor public LinkedTransferQueue(java.util.Collection<? extends E>);
     method public int drainTo(java.util.Collection<? super E>);
@@ -59901,7 +59904,7 @@
     method public int register();
   }
 
-  public class PriorityBlockingQueue extends java.util.AbstractQueue implements java.util.concurrent.BlockingQueue java.io.Serializable {
+  public class PriorityBlockingQueue<E> extends java.util.AbstractQueue implements java.util.concurrent.BlockingQueue java.io.Serializable {
     ctor public PriorityBlockingQueue();
     ctor public PriorityBlockingQueue(int);
     ctor public PriorityBlockingQueue(int, java.util.Comparator<? super E>);
@@ -59930,7 +59933,7 @@
     method protected final void setRawResult(java.lang.Void);
   }
 
-  public abstract class RecursiveTask extends java.util.concurrent.ForkJoinTask {
+  public abstract class RecursiveTask<V> extends java.util.concurrent.ForkJoinTask {
     ctor public RecursiveTask();
     method protected abstract V compute();
     method protected final boolean exec();
@@ -59949,22 +59952,22 @@
     method public abstract void rejectedExecution(java.lang.Runnable, java.util.concurrent.ThreadPoolExecutor);
   }
 
-  public abstract interface RunnableFuture implements java.util.concurrent.Future java.lang.Runnable {
+  public abstract interface RunnableFuture<V> implements java.util.concurrent.Future java.lang.Runnable {
     method public abstract void run();
   }
 
-  public abstract interface RunnableScheduledFuture implements java.util.concurrent.RunnableFuture java.util.concurrent.ScheduledFuture {
+  public abstract interface RunnableScheduledFuture<V> implements java.util.concurrent.RunnableFuture java.util.concurrent.ScheduledFuture {
     method public abstract boolean isPeriodic();
   }
 
   public abstract interface ScheduledExecutorService implements java.util.concurrent.ExecutorService {
     method public abstract java.util.concurrent.ScheduledFuture<?> schedule(java.lang.Runnable, long, java.util.concurrent.TimeUnit);
-    method public abstract java.util.concurrent.ScheduledFuture<V> schedule(java.util.concurrent.Callable<V>, long, java.util.concurrent.TimeUnit);
+    method public abstract <V> java.util.concurrent.ScheduledFuture<V> schedule(java.util.concurrent.Callable<V>, long, java.util.concurrent.TimeUnit);
     method public abstract java.util.concurrent.ScheduledFuture<?> scheduleAtFixedRate(java.lang.Runnable, long, long, java.util.concurrent.TimeUnit);
     method public abstract java.util.concurrent.ScheduledFuture<?> scheduleWithFixedDelay(java.lang.Runnable, long, long, java.util.concurrent.TimeUnit);
   }
 
-  public abstract interface ScheduledFuture implements java.util.concurrent.Delayed java.util.concurrent.Future {
+  public abstract interface ScheduledFuture<V> implements java.util.concurrent.Delayed java.util.concurrent.Future {
   }
 
   public class ScheduledThreadPoolExecutor extends java.util.concurrent.ThreadPoolExecutor implements java.util.concurrent.ScheduledExecutorService {
@@ -59972,13 +59975,13 @@
     ctor public ScheduledThreadPoolExecutor(int, java.util.concurrent.ThreadFactory);
     ctor public ScheduledThreadPoolExecutor(int, java.util.concurrent.RejectedExecutionHandler);
     ctor public ScheduledThreadPoolExecutor(int, java.util.concurrent.ThreadFactory, java.util.concurrent.RejectedExecutionHandler);
-    method protected java.util.concurrent.RunnableScheduledFuture<V> decorateTask(java.lang.Runnable, java.util.concurrent.RunnableScheduledFuture<V>);
-    method protected java.util.concurrent.RunnableScheduledFuture<V> decorateTask(java.util.concurrent.Callable<V>, java.util.concurrent.RunnableScheduledFuture<V>);
+    method protected <V> java.util.concurrent.RunnableScheduledFuture<V> decorateTask(java.lang.Runnable, java.util.concurrent.RunnableScheduledFuture<V>);
+    method protected <V> java.util.concurrent.RunnableScheduledFuture<V> decorateTask(java.util.concurrent.Callable<V>, java.util.concurrent.RunnableScheduledFuture<V>);
     method public boolean getContinueExistingPeriodicTasksAfterShutdownPolicy();
     method public boolean getExecuteExistingDelayedTasksAfterShutdownPolicy();
     method public boolean getRemoveOnCancelPolicy();
     method public java.util.concurrent.ScheduledFuture<?> schedule(java.lang.Runnable, long, java.util.concurrent.TimeUnit);
-    method public java.util.concurrent.ScheduledFuture<V> schedule(java.util.concurrent.Callable<V>, long, java.util.concurrent.TimeUnit);
+    method public <V> java.util.concurrent.ScheduledFuture<V> schedule(java.util.concurrent.Callable<V>, long, java.util.concurrent.TimeUnit);
     method public java.util.concurrent.ScheduledFuture<?> scheduleAtFixedRate(java.lang.Runnable, long, long, java.util.concurrent.TimeUnit);
     method public java.util.concurrent.ScheduledFuture<?> scheduleWithFixedDelay(java.lang.Runnable, long, long, java.util.concurrent.TimeUnit);
     method public void setContinueExistingPeriodicTasksAfterShutdownPolicy(boolean);
@@ -60008,7 +60011,7 @@
     method public boolean tryAcquire(int, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
   }
 
-  public class SynchronousQueue extends java.util.AbstractQueue implements java.util.concurrent.BlockingQueue java.io.Serializable {
+  public class SynchronousQueue<E> extends java.util.AbstractQueue implements java.util.concurrent.BlockingQueue java.io.Serializable {
     ctor public SynchronousQueue();
     ctor public SynchronousQueue(boolean);
     method public int drainTo(java.util.Collection<? super E>);
@@ -60126,7 +60129,7 @@
     ctor public TimeoutException(java.lang.String);
   }
 
-  public abstract interface TransferQueue implements java.util.concurrent.BlockingQueue {
+  public abstract interface TransferQueue<E> implements java.util.concurrent.BlockingQueue {
     method public abstract int getWaitingConsumerCount();
     method public abstract boolean hasWaitingConsumer();
     method public abstract void transfer(E) throws java.lang.InterruptedException;
@@ -60196,7 +60199,7 @@
     method public final boolean weakCompareAndSet(int, int, int);
   }
 
-  public abstract class AtomicIntegerFieldUpdater {
+  public abstract class AtomicIntegerFieldUpdater<T> {
     ctor protected AtomicIntegerFieldUpdater();
     method public final int accumulateAndGet(T, int, java.util.function.IntBinaryOperator);
     method public int addAndGet(T, int);
@@ -60211,7 +60214,7 @@
     method public final int getAndUpdate(T, java.util.function.IntUnaryOperator);
     method public int incrementAndGet(T);
     method public abstract void lazySet(T, int);
-    method public static java.util.concurrent.atomic.AtomicIntegerFieldUpdater<U> newUpdater(java.lang.Class<U>, java.lang.String);
+    method public static <U> java.util.concurrent.atomic.AtomicIntegerFieldUpdater<U> newUpdater(java.lang.Class<U>, java.lang.String);
     method public abstract void set(T, int);
     method public final int updateAndGet(T, java.util.function.IntUnaryOperator);
     method public abstract boolean weakCompareAndSet(T, int, int);
@@ -60264,7 +60267,7 @@
     method public final boolean weakCompareAndSet(int, long, long);
   }
 
-  public abstract class AtomicLongFieldUpdater {
+  public abstract class AtomicLongFieldUpdater<T> {
     ctor protected AtomicLongFieldUpdater();
     method public final long accumulateAndGet(T, long, java.util.function.LongBinaryOperator);
     method public long addAndGet(T, long);
@@ -60279,13 +60282,13 @@
     method public final long getAndUpdate(T, java.util.function.LongUnaryOperator);
     method public long incrementAndGet(T);
     method public abstract void lazySet(T, long);
-    method public static java.util.concurrent.atomic.AtomicLongFieldUpdater<U> newUpdater(java.lang.Class<U>, java.lang.String);
+    method public static <U> java.util.concurrent.atomic.AtomicLongFieldUpdater<U> newUpdater(java.lang.Class<U>, java.lang.String);
     method public abstract void set(T, long);
     method public final long updateAndGet(T, java.util.function.LongUnaryOperator);
     method public abstract boolean weakCompareAndSet(T, long, long);
   }
 
-  public class AtomicMarkableReference {
+  public class AtomicMarkableReference<V> {
     ctor public AtomicMarkableReference(V, boolean);
     method public boolean attemptMark(V, boolean);
     method public boolean compareAndSet(V, V, boolean, boolean);
@@ -60296,7 +60299,7 @@
     method public boolean weakCompareAndSet(V, V, boolean, boolean);
   }
 
-  public class AtomicReference implements java.io.Serializable {
+  public class AtomicReference<V> implements java.io.Serializable {
     ctor public AtomicReference(V);
     ctor public AtomicReference();
     method public final V accumulateAndGet(V, java.util.function.BinaryOperator<V>);
@@ -60311,7 +60314,7 @@
     method public final boolean weakCompareAndSet(V, V);
   }
 
-  public class AtomicReferenceArray implements java.io.Serializable {
+  public class AtomicReferenceArray<E> implements java.io.Serializable {
     ctor public AtomicReferenceArray(int);
     ctor public AtomicReferenceArray(E[]);
     method public final E accumulateAndGet(int, E, java.util.function.BinaryOperator<E>);
@@ -60327,7 +60330,7 @@
     method public final boolean weakCompareAndSet(int, E, E);
   }
 
-  public abstract class AtomicReferenceFieldUpdater {
+  public abstract class AtomicReferenceFieldUpdater<T, V> {
     ctor protected AtomicReferenceFieldUpdater();
     method public final V accumulateAndGet(T, V, java.util.function.BinaryOperator<V>);
     method public abstract boolean compareAndSet(T, V, V);
@@ -60336,13 +60339,13 @@
     method public V getAndSet(T, V);
     method public final V getAndUpdate(T, java.util.function.UnaryOperator<V>);
     method public abstract void lazySet(T, V);
-    method public static java.util.concurrent.atomic.AtomicReferenceFieldUpdater<U, W> newUpdater(java.lang.Class<U>, java.lang.Class<W>, java.lang.String);
+    method public static <U, W> java.util.concurrent.atomic.AtomicReferenceFieldUpdater<U, W> newUpdater(java.lang.Class<U>, java.lang.Class<W>, java.lang.String);
     method public abstract void set(T, V);
     method public final V updateAndGet(T, java.util.function.UnaryOperator<V>);
     method public abstract boolean weakCompareAndSet(T, V, V);
   }
 
-  public class AtomicStampedReference {
+  public class AtomicStampedReference<V> {
     ctor public AtomicStampedReference(V, int);
     method public boolean attemptStamp(V, int);
     method public boolean compareAndSet(V, V, int, int);
@@ -60645,33 +60648,33 @@
 
 package java.util.function {
 
-  public abstract interface BiConsumer {
+  public abstract interface BiConsumer<T, U> {
     method public abstract void accept(T, U);
     method public default java.util.function.BiConsumer<T, U> andThen(java.util.function.BiConsumer<? super T, ? super U>);
   }
 
-  public abstract interface BiFunction {
-    method public default java.util.function.BiFunction<T, U, V> andThen(java.util.function.Function<? super R, ? extends V>);
+  public abstract interface BiFunction<T, U, R> {
+    method public default <V> java.util.function.BiFunction<T, U, V> andThen(java.util.function.Function<? super R, ? extends V>);
     method public abstract R apply(T, U);
   }
 
-  public abstract interface BiPredicate {
+  public abstract interface BiPredicate<T, U> {
     method public default java.util.function.BiPredicate<T, U> and(java.util.function.BiPredicate<? super T, ? super U>);
     method public default java.util.function.BiPredicate<T, U> negate();
     method public default java.util.function.BiPredicate<T, U> or(java.util.function.BiPredicate<? super T, ? super U>);
     method public abstract boolean test(T, U);
   }
 
-  public abstract interface BinaryOperator implements java.util.function.BiFunction {
-    method public static java.util.function.BinaryOperator<T> maxBy(java.util.Comparator<? super T>);
-    method public static java.util.function.BinaryOperator<T> minBy(java.util.Comparator<? super T>);
+  public abstract interface BinaryOperator<T> implements java.util.function.BiFunction {
+    method public static <T> java.util.function.BinaryOperator<T> maxBy(java.util.Comparator<? super T>);
+    method public static <T> java.util.function.BinaryOperator<T> minBy(java.util.Comparator<? super T>);
   }
 
   public abstract interface BooleanSupplier {
     method public abstract boolean getAsBoolean();
   }
 
-  public abstract interface Consumer {
+  public abstract interface Consumer<T> {
     method public abstract void accept(T);
     method public default java.util.function.Consumer<T> andThen(java.util.function.Consumer<? super T>);
   }
@@ -60685,7 +60688,7 @@
     method public default java.util.function.DoubleConsumer andThen(java.util.function.DoubleConsumer);
   }
 
-  public abstract interface DoubleFunction {
+  public abstract interface DoubleFunction<R> {
     method public abstract R apply(double);
   }
 
@@ -60715,11 +60718,11 @@
     method public static java.util.function.DoubleUnaryOperator identity();
   }
 
-  public abstract interface Function {
-    method public default java.util.function.Function<T, V> andThen(java.util.function.Function<? super R, ? extends V>);
+  public abstract interface Function<T, R> {
+    method public default <V> java.util.function.Function<T, V> andThen(java.util.function.Function<? super R, ? extends V>);
     method public abstract R apply(T);
-    method public default java.util.function.Function<V, R> compose(java.util.function.Function<? super V, ? extends T>);
-    method public static java.util.function.Function<T, T> identity();
+    method public default <V> java.util.function.Function<V, R> compose(java.util.function.Function<? super V, ? extends T>);
+    method public static <T> java.util.function.Function<T, T> identity();
   }
 
   public abstract interface IntBinaryOperator {
@@ -60731,7 +60734,7 @@
     method public default java.util.function.IntConsumer andThen(java.util.function.IntConsumer);
   }
 
-  public abstract interface IntFunction {
+  public abstract interface IntFunction<R> {
     method public abstract R apply(int);
   }
 
@@ -60770,7 +60773,7 @@
     method public default java.util.function.LongConsumer andThen(java.util.function.LongConsumer);
   }
 
-  public abstract interface LongFunction {
+  public abstract interface LongFunction<R> {
     method public abstract R apply(long);
   }
 
@@ -60800,56 +60803,56 @@
     method public static java.util.function.LongUnaryOperator identity();
   }
 
-  public abstract interface ObjDoubleConsumer {
+  public abstract interface ObjDoubleConsumer<T> {
     method public abstract void accept(T, double);
   }
 
-  public abstract interface ObjIntConsumer {
+  public abstract interface ObjIntConsumer<T> {
     method public abstract void accept(T, int);
   }
 
-  public abstract interface ObjLongConsumer {
+  public abstract interface ObjLongConsumer<T> {
     method public abstract void accept(T, long);
   }
 
-  public abstract interface Predicate {
+  public abstract interface Predicate<T> {
     method public default java.util.function.Predicate<T> and(java.util.function.Predicate<? super T>);
-    method public static java.util.function.Predicate<T> isEqual(java.lang.Object);
+    method public static <T> java.util.function.Predicate<T> isEqual(java.lang.Object);
     method public default java.util.function.Predicate<T> negate();
     method public default java.util.function.Predicate<T> or(java.util.function.Predicate<? super T>);
     method public abstract boolean test(T);
   }
 
-  public abstract interface Supplier {
+  public abstract interface Supplier<T> {
     method public abstract T get();
   }
 
-  public abstract interface ToDoubleBiFunction {
+  public abstract interface ToDoubleBiFunction<T, U> {
     method public abstract double applyAsDouble(T, U);
   }
 
-  public abstract interface ToDoubleFunction {
+  public abstract interface ToDoubleFunction<T> {
     method public abstract double applyAsDouble(T);
   }
 
-  public abstract interface ToIntBiFunction {
+  public abstract interface ToIntBiFunction<T, U> {
     method public abstract int applyAsInt(T, U);
   }
 
-  public abstract interface ToIntFunction {
+  public abstract interface ToIntFunction<T> {
     method public abstract int applyAsInt(T);
   }
 
-  public abstract interface ToLongBiFunction {
+  public abstract interface ToLongBiFunction<T, U> {
     method public abstract long applyAsLong(T, U);
   }
 
-  public abstract interface ToLongFunction {
+  public abstract interface ToLongFunction<T> {
     method public abstract long applyAsLong(T);
   }
 
-  public abstract interface UnaryOperator implements java.util.function.Function {
-    method public static java.util.function.UnaryOperator<T> identity();
+  public abstract interface UnaryOperator<T> implements java.util.function.Function {
+    method public static <T> java.util.function.UnaryOperator<T> identity();
   }
 
 }
@@ -61437,7 +61440,7 @@
 
 package java.util.stream {
 
-  public abstract interface BaseStream implements java.lang.AutoCloseable {
+  public abstract interface BaseStream<T, S extends java.util.stream.BaseStream<T, S>> implements java.lang.AutoCloseable {
     method public abstract void close();
     method public abstract boolean isParallel();
     method public abstract java.util.Iterator<T> iterator();
@@ -61448,13 +61451,13 @@
     method public abstract S unordered();
   }
 
-  public abstract interface Collector {
+  public abstract interface Collector<T, A, R> {
     method public abstract java.util.function.BiConsumer<A, T> accumulator();
     method public abstract java.util.Set<java.util.stream.Collector.Characteristics> characteristics();
     method public abstract java.util.function.BinaryOperator<A> combiner();
     method public abstract java.util.function.Function<A, R> finisher();
-    method public static java.util.stream.Collector<T, R, R> of(java.util.function.Supplier<R>, java.util.function.BiConsumer<R, T>, java.util.function.BinaryOperator<R>, java.util.stream.Collector.Characteristics...);
-    method public static java.util.stream.Collector<T, A, R> of(java.util.function.Supplier<A>, java.util.function.BiConsumer<A, T>, java.util.function.BinaryOperator<A>, java.util.function.Function<A, R>, java.util.stream.Collector.Characteristics...);
+    method public static <T, R> java.util.stream.Collector<T, R, R> of(java.util.function.Supplier<R>, java.util.function.BiConsumer<R, T>, java.util.function.BinaryOperator<R>, java.util.stream.Collector.Characteristics...);
+    method public static <T, A, R> java.util.stream.Collector<T, A, R> of(java.util.function.Supplier<A>, java.util.function.BiConsumer<A, T>, java.util.function.BinaryOperator<A>, java.util.function.Function<A, R>, java.util.stream.Collector.Characteristics...);
     method public abstract java.util.function.Supplier<A> supplier();
   }
 
@@ -61467,43 +61470,43 @@
   }
 
   public final class Collectors {
-    method public static java.util.stream.Collector<T, ?, java.lang.Double> averagingDouble(java.util.function.ToDoubleFunction<? super T>);
-    method public static java.util.stream.Collector<T, ?, java.lang.Double> averagingInt(java.util.function.ToIntFunction<? super T>);
-    method public static java.util.stream.Collector<T, ?, java.lang.Double> averagingLong(java.util.function.ToLongFunction<? super T>);
-    method public static java.util.stream.Collector<T, A, RR> collectingAndThen(java.util.stream.Collector<T, A, R>, java.util.function.Function<R, RR>);
-    method public static java.util.stream.Collector<T, ?, java.lang.Long> counting();
-    method public static java.util.stream.Collector<T, ?, java.util.Map<K, java.util.List<T>>> groupingBy(java.util.function.Function<? super T, ? extends K>);
-    method public static java.util.stream.Collector<T, ?, java.util.Map<K, D>> groupingBy(java.util.function.Function<? super T, ? extends K>, java.util.stream.Collector<? super T, A, D>);
-    method public static java.util.stream.Collector<T, ?, M> groupingBy(java.util.function.Function<? super T, ? extends K>, java.util.function.Supplier<M>, java.util.stream.Collector<? super T, A, D>);
-    method public static java.util.stream.Collector<T, ?, java.util.concurrent.ConcurrentMap<K, java.util.List<T>>> groupingByConcurrent(java.util.function.Function<? super T, ? extends K>);
-    method public static java.util.stream.Collector<T, ?, java.util.concurrent.ConcurrentMap<K, D>> groupingByConcurrent(java.util.function.Function<? super T, ? extends K>, java.util.stream.Collector<? super T, A, D>);
-    method public static java.util.stream.Collector<T, ?, M> groupingByConcurrent(java.util.function.Function<? super T, ? extends K>, java.util.function.Supplier<M>, java.util.stream.Collector<? super T, A, D>);
+    method public static <T> java.util.stream.Collector<T, ?, java.lang.Double> averagingDouble(java.util.function.ToDoubleFunction<? super T>);
+    method public static <T> java.util.stream.Collector<T, ?, java.lang.Double> averagingInt(java.util.function.ToIntFunction<? super T>);
+    method public static <T> java.util.stream.Collector<T, ?, java.lang.Double> averagingLong(java.util.function.ToLongFunction<? super T>);
+    method public static <T, A, R, RR> java.util.stream.Collector<T, A, RR> collectingAndThen(java.util.stream.Collector<T, A, R>, java.util.function.Function<R, RR>);
+    method public static <T> java.util.stream.Collector<T, ?, java.lang.Long> counting();
+    method public static <T, K> java.util.stream.Collector<T, ?, java.util.Map<K, java.util.List<T>>> groupingBy(java.util.function.Function<? super T, ? extends K>);
+    method public static <T, K, A, D> java.util.stream.Collector<T, ?, java.util.Map<K, D>> groupingBy(java.util.function.Function<? super T, ? extends K>, java.util.stream.Collector<? super T, A, D>);
+    method public static <T, K, D, A, M extends java.util.Map<K, D>> java.util.stream.Collector<T, ?, M> groupingBy(java.util.function.Function<? super T, ? extends K>, java.util.function.Supplier<M>, java.util.stream.Collector<? super T, A, D>);
+    method public static <T, K> java.util.stream.Collector<T, ?, java.util.concurrent.ConcurrentMap<K, java.util.List<T>>> groupingByConcurrent(java.util.function.Function<? super T, ? extends K>);
+    method public static <T, K, A, D> java.util.stream.Collector<T, ?, java.util.concurrent.ConcurrentMap<K, D>> groupingByConcurrent(java.util.function.Function<? super T, ? extends K>, java.util.stream.Collector<? super T, A, D>);
+    method public static <T, K, A, D, M extends java.util.concurrent.ConcurrentMap<K, D>> java.util.stream.Collector<T, ?, M> groupingByConcurrent(java.util.function.Function<? super T, ? extends K>, java.util.function.Supplier<M>, java.util.stream.Collector<? super T, A, D>);
     method public static java.util.stream.Collector<java.lang.CharSequence, ?, java.lang.String> joining();
     method public static java.util.stream.Collector<java.lang.CharSequence, ?, java.lang.String> joining(java.lang.CharSequence);
     method public static java.util.stream.Collector<java.lang.CharSequence, ?, java.lang.String> joining(java.lang.CharSequence, java.lang.CharSequence, java.lang.CharSequence);
-    method public static java.util.stream.Collector<T, ?, R> mapping(java.util.function.Function<? super T, ? extends U>, java.util.stream.Collector<? super U, A, R>);
-    method public static java.util.stream.Collector<T, ?, java.util.Optional<T>> maxBy(java.util.Comparator<? super T>);
-    method public static java.util.stream.Collector<T, ?, java.util.Optional<T>> minBy(java.util.Comparator<? super T>);
-    method public static java.util.stream.Collector<T, ?, java.util.Map<java.lang.Boolean, java.util.List<T>>> partitioningBy(java.util.function.Predicate<? super T>);
-    method public static java.util.stream.Collector<T, ?, java.util.Map<java.lang.Boolean, D>> partitioningBy(java.util.function.Predicate<? super T>, java.util.stream.Collector<? super T, A, D>);
-    method public static java.util.stream.Collector<T, ?, T> reducing(T, java.util.function.BinaryOperator<T>);
-    method public static java.util.stream.Collector<T, ?, java.util.Optional<T>> reducing(java.util.function.BinaryOperator<T>);
-    method public static java.util.stream.Collector<T, ?, U> reducing(U, java.util.function.Function<? super T, ? extends U>, java.util.function.BinaryOperator<U>);
-    method public static java.util.stream.Collector<T, ?, java.util.DoubleSummaryStatistics> summarizingDouble(java.util.function.ToDoubleFunction<? super T>);
-    method public static java.util.stream.Collector<T, ?, java.util.IntSummaryStatistics> summarizingInt(java.util.function.ToIntFunction<? super T>);
-    method public static java.util.stream.Collector<T, ?, java.util.LongSummaryStatistics> summarizingLong(java.util.function.ToLongFunction<? super T>);
-    method public static java.util.stream.Collector<T, ?, java.lang.Double> summingDouble(java.util.function.ToDoubleFunction<? super T>);
-    method public static java.util.stream.Collector<T, ?, java.lang.Integer> summingInt(java.util.function.ToIntFunction<? super T>);
-    method public static java.util.stream.Collector<T, ?, java.lang.Long> summingLong(java.util.function.ToLongFunction<? super T>);
-    method public static java.util.stream.Collector<T, ?, C> toCollection(java.util.function.Supplier<C>);
-    method public static java.util.stream.Collector<T, ?, java.util.concurrent.ConcurrentMap<K, U>> toConcurrentMap(java.util.function.Function<? super T, ? extends K>, java.util.function.Function<? super T, ? extends U>);
-    method public static java.util.stream.Collector<T, ?, java.util.concurrent.ConcurrentMap<K, U>> toConcurrentMap(java.util.function.Function<? super T, ? extends K>, java.util.function.Function<? super T, ? extends U>, java.util.function.BinaryOperator<U>);
-    method public static java.util.stream.Collector<T, ?, M> toConcurrentMap(java.util.function.Function<? super T, ? extends K>, java.util.function.Function<? super T, ? extends U>, java.util.function.BinaryOperator<U>, java.util.function.Supplier<M>);
-    method public static java.util.stream.Collector<T, ?, java.util.List<T>> toList();
-    method public static java.util.stream.Collector<T, ?, java.util.Map<K, U>> toMap(java.util.function.Function<? super T, ? extends K>, java.util.function.Function<? super T, ? extends U>);
-    method public static java.util.stream.Collector<T, ?, java.util.Map<K, U>> toMap(java.util.function.Function<? super T, ? extends K>, java.util.function.Function<? super T, ? extends U>, java.util.function.BinaryOperator<U>);
-    method public static java.util.stream.Collector<T, ?, M> toMap(java.util.function.Function<? super T, ? extends K>, java.util.function.Function<? super T, ? extends U>, java.util.function.BinaryOperator<U>, java.util.function.Supplier<M>);
-    method public static java.util.stream.Collector<T, ?, java.util.Set<T>> toSet();
+    method public static <T, U, A, R> java.util.stream.Collector<T, ?, R> mapping(java.util.function.Function<? super T, ? extends U>, java.util.stream.Collector<? super U, A, R>);
+    method public static <T> java.util.stream.Collector<T, ?, java.util.Optional<T>> maxBy(java.util.Comparator<? super T>);
+    method public static <T> java.util.stream.Collector<T, ?, java.util.Optional<T>> minBy(java.util.Comparator<? super T>);
+    method public static <T> java.util.stream.Collector<T, ?, java.util.Map<java.lang.Boolean, java.util.List<T>>> partitioningBy(java.util.function.Predicate<? super T>);
+    method public static <T, D, A> java.util.stream.Collector<T, ?, java.util.Map<java.lang.Boolean, D>> partitioningBy(java.util.function.Predicate<? super T>, java.util.stream.Collector<? super T, A, D>);
+    method public static <T> java.util.stream.Collector<T, ?, T> reducing(T, java.util.function.BinaryOperator<T>);
+    method public static <T> java.util.stream.Collector<T, ?, java.util.Optional<T>> reducing(java.util.function.BinaryOperator<T>);
+    method public static <T, U> java.util.stream.Collector<T, ?, U> reducing(U, java.util.function.Function<? super T, ? extends U>, java.util.function.BinaryOperator<U>);
+    method public static <T> java.util.stream.Collector<T, ?, java.util.DoubleSummaryStatistics> summarizingDouble(java.util.function.ToDoubleFunction<? super T>);
+    method public static <T> java.util.stream.Collector<T, ?, java.util.IntSummaryStatistics> summarizingInt(java.util.function.ToIntFunction<? super T>);
+    method public static <T> java.util.stream.Collector<T, ?, java.util.LongSummaryStatistics> summarizingLong(java.util.function.ToLongFunction<? super T>);
+    method public static <T> java.util.stream.Collector<T, ?, java.lang.Double> summingDouble(java.util.function.ToDoubleFunction<? super T>);
+    method public static <T> java.util.stream.Collector<T, ?, java.lang.Integer> summingInt(java.util.function.ToIntFunction<? super T>);
+    method public static <T> java.util.stream.Collector<T, ?, java.lang.Long> summingLong(java.util.function.ToLongFunction<? super T>);
+    method public static <T, C extends java.util.Collection<T>> java.util.stream.Collector<T, ?, C> toCollection(java.util.function.Supplier<C>);
+    method public static <T, K, U> java.util.stream.Collector<T, ?, java.util.concurrent.ConcurrentMap<K, U>> toConcurrentMap(java.util.function.Function<? super T, ? extends K>, java.util.function.Function<? super T, ? extends U>);
+    method public static <T, K, U> java.util.stream.Collector<T, ?, java.util.concurrent.ConcurrentMap<K, U>> toConcurrentMap(java.util.function.Function<? super T, ? extends K>, java.util.function.Function<? super T, ? extends U>, java.util.function.BinaryOperator<U>);
+    method public static <T, K, U, M extends java.util.concurrent.ConcurrentMap<K, U>> java.util.stream.Collector<T, ?, M> toConcurrentMap(java.util.function.Function<? super T, ? extends K>, java.util.function.Function<? super T, ? extends U>, java.util.function.BinaryOperator<U>, java.util.function.Supplier<M>);
+    method public static <T> java.util.stream.Collector<T, ?, java.util.List<T>> toList();
+    method public static <T, K, U> java.util.stream.Collector<T, ?, java.util.Map<K, U>> toMap(java.util.function.Function<? super T, ? extends K>, java.util.function.Function<? super T, ? extends U>);
+    method public static <T, K, U> java.util.stream.Collector<T, ?, java.util.Map<K, U>> toMap(java.util.function.Function<? super T, ? extends K>, java.util.function.Function<? super T, ? extends U>, java.util.function.BinaryOperator<U>);
+    method public static <T, K, U, M extends java.util.Map<K, U>> java.util.stream.Collector<T, ?, M> toMap(java.util.function.Function<? super T, ? extends K>, java.util.function.Function<? super T, ? extends U>, java.util.function.BinaryOperator<U>, java.util.function.Supplier<M>);
+    method public static <T> java.util.stream.Collector<T, ?, java.util.Set<T>> toSet();
   }
 
   public abstract interface DoubleStream implements java.util.stream.BaseStream {
@@ -61512,7 +61515,7 @@
     method public abstract java.util.OptionalDouble average();
     method public abstract java.util.stream.Stream<java.lang.Double> boxed();
     method public static java.util.stream.DoubleStream.Builder builder();
-    method public abstract R collect(java.util.function.Supplier<R>, java.util.function.ObjDoubleConsumer<R>, java.util.function.BiConsumer<R, R>);
+    method public abstract <R> R collect(java.util.function.Supplier<R>, java.util.function.ObjDoubleConsumer<R>, java.util.function.BiConsumer<R, R>);
     method public static java.util.stream.DoubleStream concat(java.util.stream.DoubleStream, java.util.stream.DoubleStream);
     method public abstract long count();
     method public abstract java.util.stream.DoubleStream distinct();
@@ -61530,7 +61533,7 @@
     method public abstract java.util.stream.DoubleStream map(java.util.function.DoubleUnaryOperator);
     method public abstract java.util.stream.IntStream mapToInt(java.util.function.DoubleToIntFunction);
     method public abstract java.util.stream.LongStream mapToLong(java.util.function.DoubleToLongFunction);
-    method public abstract java.util.stream.Stream<U> mapToObj(java.util.function.DoubleFunction<? extends U>);
+    method public abstract <U> java.util.stream.Stream<U> mapToObj(java.util.function.DoubleFunction<? extends U>);
     method public abstract java.util.OptionalDouble max();
     method public abstract java.util.OptionalDouble min();
     method public abstract boolean noneMatch(java.util.function.DoublePredicate);
@@ -61563,7 +61566,7 @@
     method public abstract java.util.OptionalDouble average();
     method public abstract java.util.stream.Stream<java.lang.Integer> boxed();
     method public static java.util.stream.IntStream.Builder builder();
-    method public abstract R collect(java.util.function.Supplier<R>, java.util.function.ObjIntConsumer<R>, java.util.function.BiConsumer<R, R>);
+    method public abstract <R> R collect(java.util.function.Supplier<R>, java.util.function.ObjIntConsumer<R>, java.util.function.BiConsumer<R, R>);
     method public static java.util.stream.IntStream concat(java.util.stream.IntStream, java.util.stream.IntStream);
     method public abstract long count();
     method public abstract java.util.stream.IntStream distinct();
@@ -61581,7 +61584,7 @@
     method public abstract java.util.stream.IntStream map(java.util.function.IntUnaryOperator);
     method public abstract java.util.stream.DoubleStream mapToDouble(java.util.function.IntToDoubleFunction);
     method public abstract java.util.stream.LongStream mapToLong(java.util.function.IntToLongFunction);
-    method public abstract java.util.stream.Stream<U> mapToObj(java.util.function.IntFunction<? extends U>);
+    method public abstract <U> java.util.stream.Stream<U> mapToObj(java.util.function.IntFunction<? extends U>);
     method public abstract java.util.OptionalInt max();
     method public abstract java.util.OptionalInt min();
     method public abstract boolean noneMatch(java.util.function.IntPredicate);
@@ -61615,7 +61618,7 @@
     method public abstract java.util.OptionalDouble average();
     method public abstract java.util.stream.Stream<java.lang.Long> boxed();
     method public static java.util.stream.LongStream.Builder builder();
-    method public abstract R collect(java.util.function.Supplier<R>, java.util.function.ObjLongConsumer<R>, java.util.function.BiConsumer<R, R>);
+    method public abstract <R> R collect(java.util.function.Supplier<R>, java.util.function.ObjLongConsumer<R>, java.util.function.BiConsumer<R, R>);
     method public static java.util.stream.LongStream concat(java.util.stream.LongStream, java.util.stream.LongStream);
     method public abstract long count();
     method public abstract java.util.stream.LongStream distinct();
@@ -61633,7 +61636,7 @@
     method public abstract java.util.stream.LongStream map(java.util.function.LongUnaryOperator);
     method public abstract java.util.stream.DoubleStream mapToDouble(java.util.function.LongToDoubleFunction);
     method public abstract java.util.stream.IntStream mapToInt(java.util.function.LongToIntFunction);
-    method public abstract java.util.stream.Stream<U> mapToObj(java.util.function.LongFunction<? extends U>);
+    method public abstract <U> java.util.stream.Stream<U> mapToObj(java.util.function.LongFunction<? extends U>);
     method public abstract java.util.OptionalLong max();
     method public abstract java.util.OptionalLong min();
     method public abstract boolean noneMatch(java.util.function.LongPredicate);
@@ -61660,49 +61663,49 @@
     method public abstract java.util.stream.LongStream build();
   }
 
-  public abstract interface Stream implements java.util.stream.BaseStream {
+  public abstract interface Stream<T> implements java.util.stream.BaseStream {
     method public abstract boolean allMatch(java.util.function.Predicate<? super T>);
     method public abstract boolean anyMatch(java.util.function.Predicate<? super T>);
-    method public static java.util.stream.Stream.Builder<T> builder();
-    method public abstract R collect(java.util.function.Supplier<R>, java.util.function.BiConsumer<R, ? super T>, java.util.function.BiConsumer<R, R>);
-    method public abstract R collect(java.util.stream.Collector<? super T, A, R>);
-    method public static java.util.stream.Stream<T> concat(java.util.stream.Stream<? extends T>, java.util.stream.Stream<? extends T>);
+    method public static <T> java.util.stream.Stream.Builder<T> builder();
+    method public abstract <R> R collect(java.util.function.Supplier<R>, java.util.function.BiConsumer<R, ? super T>, java.util.function.BiConsumer<R, R>);
+    method public abstract <R, A> R collect(java.util.stream.Collector<? super T, A, R>);
+    method public static <T> java.util.stream.Stream<T> concat(java.util.stream.Stream<? extends T>, java.util.stream.Stream<? extends T>);
     method public abstract long count();
     method public abstract java.util.stream.Stream<T> distinct();
-    method public static java.util.stream.Stream<T> empty();
+    method public static <T> java.util.stream.Stream<T> empty();
     method public abstract java.util.stream.Stream<T> filter(java.util.function.Predicate<? super T>);
     method public abstract java.util.Optional<T> findAny();
     method public abstract java.util.Optional<T> findFirst();
-    method public abstract java.util.stream.Stream<R> flatMap(java.util.function.Function<? super T, ? extends java.util.stream.Stream<? extends R>>);
+    method public abstract <R> java.util.stream.Stream<R> flatMap(java.util.function.Function<? super T, ? extends java.util.stream.Stream<? extends R>>);
     method public abstract java.util.stream.DoubleStream flatMapToDouble(java.util.function.Function<? super T, ? extends java.util.stream.DoubleStream>);
     method public abstract java.util.stream.IntStream flatMapToInt(java.util.function.Function<? super T, ? extends java.util.stream.IntStream>);
     method public abstract java.util.stream.LongStream flatMapToLong(java.util.function.Function<? super T, ? extends java.util.stream.LongStream>);
     method public abstract void forEach(java.util.function.Consumer<? super T>);
     method public abstract void forEachOrdered(java.util.function.Consumer<? super T>);
-    method public static java.util.stream.Stream<T> generate(java.util.function.Supplier<T>);
-    method public static java.util.stream.Stream<T> iterate(T, java.util.function.UnaryOperator<T>);
+    method public static <T> java.util.stream.Stream<T> generate(java.util.function.Supplier<T>);
+    method public static <T> java.util.stream.Stream<T> iterate(T, java.util.function.UnaryOperator<T>);
     method public abstract java.util.stream.Stream<T> limit(long);
-    method public abstract java.util.stream.Stream<R> map(java.util.function.Function<? super T, ? extends R>);
+    method public abstract <R> java.util.stream.Stream<R> map(java.util.function.Function<? super T, ? extends R>);
     method public abstract java.util.stream.DoubleStream mapToDouble(java.util.function.ToDoubleFunction<? super T>);
     method public abstract java.util.stream.IntStream mapToInt(java.util.function.ToIntFunction<? super T>);
     method public abstract java.util.stream.LongStream mapToLong(java.util.function.ToLongFunction<? super T>);
     method public abstract java.util.Optional<T> max(java.util.Comparator<? super T>);
     method public abstract java.util.Optional<T> min(java.util.Comparator<? super T>);
     method public abstract boolean noneMatch(java.util.function.Predicate<? super T>);
-    method public static java.util.stream.Stream<T> of(T);
-    method public static java.util.stream.Stream<T> of(T...);
+    method public static <T> java.util.stream.Stream<T> of(T);
+    method public static <T> java.util.stream.Stream<T> of(T...);
     method public abstract java.util.stream.Stream<T> peek(java.util.function.Consumer<? super T>);
     method public abstract T reduce(T, java.util.function.BinaryOperator<T>);
     method public abstract java.util.Optional<T> reduce(java.util.function.BinaryOperator<T>);
-    method public abstract U reduce(U, java.util.function.BiFunction<U, ? super T, U>, java.util.function.BinaryOperator<U>);
+    method public abstract <U> U reduce(U, java.util.function.BiFunction<U, ? super T, U>, java.util.function.BinaryOperator<U>);
     method public abstract java.util.stream.Stream<T> skip(long);
     method public abstract java.util.stream.Stream<T> sorted();
     method public abstract java.util.stream.Stream<T> sorted(java.util.Comparator<? super T>);
     method public abstract java.lang.Object[] toArray();
-    method public abstract A[] toArray(java.util.function.IntFunction<A[]>);
+    method public abstract <A> A[] toArray(java.util.function.IntFunction<A[]>);
   }
 
-  public static abstract interface Stream.Builder implements java.util.function.Consumer {
+  public static abstract interface Stream.Builder<T> implements java.util.function.Consumer {
     method public abstract void accept(T);
     method public default java.util.stream.Stream.Builder<T> add(T);
     method public abstract java.util.stream.Stream<T> build();
@@ -61715,8 +61718,8 @@
     method public static java.util.stream.IntStream intStream(java.util.function.Supplier<? extends java.util.Spliterator.OfInt>, int, boolean);
     method public static java.util.stream.LongStream longStream(java.util.Spliterator.OfLong, boolean);
     method public static java.util.stream.LongStream longStream(java.util.function.Supplier<? extends java.util.Spliterator.OfLong>, int, boolean);
-    method public static java.util.stream.Stream<T> stream(java.util.Spliterator<T>, boolean);
-    method public static java.util.stream.Stream<T> stream(java.util.function.Supplier<? extends java.util.Spliterator<T>>, int, boolean);
+    method public static <T> java.util.stream.Stream<T> stream(java.util.Spliterator<T>, boolean);
+    method public static <T> java.util.stream.Stream<T> stream(java.util.function.Supplier<? extends java.util.Spliterator<T>>, int, boolean);
   }
 
 }
@@ -63887,16 +63890,16 @@
   public final class Subject implements java.io.Serializable {
     ctor public Subject();
     ctor public Subject(boolean, java.util.Set<? extends java.security.Principal>, java.util.Set<?>, java.util.Set<?>);
-    method public static T doAs(javax.security.auth.Subject, java.security.PrivilegedAction<T>);
-    method public static T doAs(javax.security.auth.Subject, java.security.PrivilegedExceptionAction<T>) throws java.security.PrivilegedActionException;
-    method public static T doAsPrivileged(javax.security.auth.Subject, java.security.PrivilegedAction<T>, java.security.AccessControlContext);
-    method public static T doAsPrivileged(javax.security.auth.Subject, java.security.PrivilegedExceptionAction<T>, java.security.AccessControlContext) throws java.security.PrivilegedActionException;
+    method public static <T> T doAs(javax.security.auth.Subject, java.security.PrivilegedAction<T>);
+    method public static <T> T doAs(javax.security.auth.Subject, java.security.PrivilegedExceptionAction<T>) throws java.security.PrivilegedActionException;
+    method public static <T> T doAsPrivileged(javax.security.auth.Subject, java.security.PrivilegedAction<T>, java.security.AccessControlContext);
+    method public static <T> T doAsPrivileged(javax.security.auth.Subject, java.security.PrivilegedExceptionAction<T>, java.security.AccessControlContext) throws java.security.PrivilegedActionException;
     method public java.util.Set<java.security.Principal> getPrincipals();
-    method public java.util.Set<T> getPrincipals(java.lang.Class<T>);
+    method public <T extends java.security.Principal> java.util.Set<T> getPrincipals(java.lang.Class<T>);
     method public java.util.Set<java.lang.Object> getPrivateCredentials();
-    method public java.util.Set<T> getPrivateCredentials(java.lang.Class<T>);
+    method public <T> java.util.Set<T> getPrivateCredentials(java.lang.Class<T>);
     method public java.util.Set<java.lang.Object> getPublicCredentials();
-    method public java.util.Set<T> getPublicCredentials(java.lang.Class<T>);
+    method public <T> java.util.Set<T> getPublicCredentials(java.lang.Class<T>);
     method public static javax.security.auth.Subject getSubject(java.security.AccessControlContext);
     method public boolean isReadOnly();
     method public void setReadOnly();
diff --git a/system-api/24.txt b/system-api/24.txt
index 3a2f29b..bd02a47 100644
--- a/system-api/24.txt
+++ b/system-api/24.txt
@@ -169,6 +169,7 @@
     field public static final java.lang.String READ_INSTALL_SESSIONS = "android.permission.READ_INSTALL_SESSIONS";
     field public static final java.lang.String READ_LOGS = "android.permission.READ_LOGS";
     field public static final java.lang.String READ_NETWORK_USAGE_HISTORY = "android.permission.READ_NETWORK_USAGE_HISTORY";
+    field public static final java.lang.String READ_OEM_UNLOCK_STATE = "android.permission.READ_OEM_UNLOCK_STATE";
     field public static final java.lang.String READ_PHONE_STATE = "android.permission.READ_PHONE_STATE";
     field public static final java.lang.String READ_PRIVILEGED_PHONE_STATE = "android.permission.READ_PRIVILEGED_PHONE_STATE";
     field public static final java.lang.String READ_SEARCH_INDEXABLES = "android.permission.READ_SEARCH_INDEXABLES";
@@ -3021,11 +3022,11 @@
     field public static final java.lang.String LOGIN_ACCOUNTS_CHANGED_ACTION = "android.accounts.LOGIN_ACCOUNTS_CHANGED";
   }
 
-  public abstract interface AccountManagerCallback {
+  public abstract interface AccountManagerCallback<V> {
     method public abstract void run(android.accounts.AccountManagerFuture<V>);
   }
 
-  public abstract interface AccountManagerFuture {
+  public abstract interface AccountManagerFuture<V> {
     method public abstract boolean cancel(boolean);
     method public abstract V getResult() throws android.accounts.AuthenticatorException, java.io.IOException, android.accounts.OperationCanceledException;
     method public abstract V getResult(long, java.util.concurrent.TimeUnit) throws android.accounts.AuthenticatorException, java.io.IOException, android.accounts.OperationCanceledException;
@@ -3171,7 +3172,7 @@
     method public java.lang.Object evaluate(float, java.lang.Object, java.lang.Object);
   }
 
-  public abstract class BidirectionalTypeConverter extends android.animation.TypeConverter {
+  public abstract class BidirectionalTypeConverter<T, V> extends android.animation.TypeConverter {
     ctor public BidirectionalTypeConverter(java.lang.Class<T>, java.lang.Class<V>);
     method public abstract T convertBack(V);
     method public android.animation.BidirectionalTypeConverter<V, T> invert();
@@ -3263,26 +3264,26 @@
     method public java.lang.String getPropertyName();
     method public java.lang.Object getTarget();
     method public static android.animation.ObjectAnimator ofArgb(java.lang.Object, java.lang.String, int...);
-    method public static android.animation.ObjectAnimator ofArgb(T, android.util.Property<T, java.lang.Integer>, int...);
+    method public static <T> android.animation.ObjectAnimator ofArgb(T, android.util.Property<T, java.lang.Integer>, int...);
     method public static android.animation.ObjectAnimator ofFloat(java.lang.Object, java.lang.String, float...);
     method public static android.animation.ObjectAnimator ofFloat(java.lang.Object, java.lang.String, java.lang.String, android.graphics.Path);
-    method public static android.animation.ObjectAnimator ofFloat(T, android.util.Property<T, java.lang.Float>, float...);
-    method public static android.animation.ObjectAnimator ofFloat(T, android.util.Property<T, java.lang.Float>, android.util.Property<T, java.lang.Float>, android.graphics.Path);
+    method public static <T> android.animation.ObjectAnimator ofFloat(T, android.util.Property<T, java.lang.Float>, float...);
+    method public static <T> android.animation.ObjectAnimator ofFloat(T, android.util.Property<T, java.lang.Float>, android.util.Property<T, java.lang.Float>, android.graphics.Path);
     method public static android.animation.ObjectAnimator ofInt(java.lang.Object, java.lang.String, int...);
     method public static android.animation.ObjectAnimator ofInt(java.lang.Object, java.lang.String, java.lang.String, android.graphics.Path);
-    method public static android.animation.ObjectAnimator ofInt(T, android.util.Property<T, java.lang.Integer>, int...);
-    method public static android.animation.ObjectAnimator ofInt(T, android.util.Property<T, java.lang.Integer>, android.util.Property<T, java.lang.Integer>, android.graphics.Path);
+    method public static <T> android.animation.ObjectAnimator ofInt(T, android.util.Property<T, java.lang.Integer>, int...);
+    method public static <T> android.animation.ObjectAnimator ofInt(T, android.util.Property<T, java.lang.Integer>, android.util.Property<T, java.lang.Integer>, android.graphics.Path);
     method public static android.animation.ObjectAnimator ofMultiFloat(java.lang.Object, java.lang.String, float[][]);
     method public static android.animation.ObjectAnimator ofMultiFloat(java.lang.Object, java.lang.String, android.graphics.Path);
-    method public static android.animation.ObjectAnimator ofMultiFloat(java.lang.Object, java.lang.String, android.animation.TypeConverter<T, float[]>, android.animation.TypeEvaluator<T>, T...);
+    method public static <T> android.animation.ObjectAnimator ofMultiFloat(java.lang.Object, java.lang.String, android.animation.TypeConverter<T, float[]>, android.animation.TypeEvaluator<T>, T...);
     method public static android.animation.ObjectAnimator ofMultiInt(java.lang.Object, java.lang.String, int[][]);
     method public static android.animation.ObjectAnimator ofMultiInt(java.lang.Object, java.lang.String, android.graphics.Path);
-    method public static android.animation.ObjectAnimator ofMultiInt(java.lang.Object, java.lang.String, android.animation.TypeConverter<T, int[]>, android.animation.TypeEvaluator<T>, T...);
+    method public static <T> android.animation.ObjectAnimator ofMultiInt(java.lang.Object, java.lang.String, android.animation.TypeConverter<T, int[]>, android.animation.TypeEvaluator<T>, T...);
     method public static android.animation.ObjectAnimator ofObject(java.lang.Object, java.lang.String, android.animation.TypeEvaluator, java.lang.Object...);
     method public static android.animation.ObjectAnimator ofObject(java.lang.Object, java.lang.String, android.animation.TypeConverter<android.graphics.PointF, ?>, android.graphics.Path);
-    method public static android.animation.ObjectAnimator ofObject(T, android.util.Property<T, V>, android.animation.TypeEvaluator<V>, V...);
-    method public static android.animation.ObjectAnimator ofObject(T, android.util.Property<T, P>, android.animation.TypeConverter<V, P>, android.animation.TypeEvaluator<V>, V...);
-    method public static android.animation.ObjectAnimator ofObject(T, android.util.Property<T, V>, android.animation.TypeConverter<android.graphics.PointF, V>, android.graphics.Path);
+    method public static <T, V> android.animation.ObjectAnimator ofObject(T, android.util.Property<T, V>, android.animation.TypeEvaluator<V>, V...);
+    method public static <T, V, P> android.animation.ObjectAnimator ofObject(T, android.util.Property<T, P>, android.animation.TypeConverter<V, P>, android.animation.TypeEvaluator<V>, V...);
+    method public static <T, V> android.animation.ObjectAnimator ofObject(T, android.util.Property<T, V>, android.animation.TypeConverter<android.graphics.PointF, V>, android.graphics.Path);
     method public static android.animation.ObjectAnimator ofPropertyValuesHolder(java.lang.Object, android.animation.PropertyValuesHolder...);
     method public void setAutoCancel(boolean);
     method public void setProperty(android.util.Property);
@@ -3306,17 +3307,17 @@
     method public static android.animation.PropertyValuesHolder ofKeyframe(android.util.Property, android.animation.Keyframe...);
     method public static android.animation.PropertyValuesHolder ofMultiFloat(java.lang.String, float[][]);
     method public static android.animation.PropertyValuesHolder ofMultiFloat(java.lang.String, android.graphics.Path);
-    method public static android.animation.PropertyValuesHolder ofMultiFloat(java.lang.String, android.animation.TypeConverter<V, float[]>, android.animation.TypeEvaluator<V>, V...);
-    method public static android.animation.PropertyValuesHolder ofMultiFloat(java.lang.String, android.animation.TypeConverter<T, float[]>, android.animation.TypeEvaluator<T>, android.animation.Keyframe...);
+    method public static <V> android.animation.PropertyValuesHolder ofMultiFloat(java.lang.String, android.animation.TypeConverter<V, float[]>, android.animation.TypeEvaluator<V>, V...);
+    method public static <T> android.animation.PropertyValuesHolder ofMultiFloat(java.lang.String, android.animation.TypeConverter<T, float[]>, android.animation.TypeEvaluator<T>, android.animation.Keyframe...);
     method public static android.animation.PropertyValuesHolder ofMultiInt(java.lang.String, int[][]);
     method public static android.animation.PropertyValuesHolder ofMultiInt(java.lang.String, android.graphics.Path);
-    method public static android.animation.PropertyValuesHolder ofMultiInt(java.lang.String, android.animation.TypeConverter<V, int[]>, android.animation.TypeEvaluator<V>, V...);
-    method public static android.animation.PropertyValuesHolder ofMultiInt(java.lang.String, android.animation.TypeConverter<T, int[]>, android.animation.TypeEvaluator<T>, android.animation.Keyframe...);
+    method public static <V> android.animation.PropertyValuesHolder ofMultiInt(java.lang.String, android.animation.TypeConverter<V, int[]>, android.animation.TypeEvaluator<V>, V...);
+    method public static <T> android.animation.PropertyValuesHolder ofMultiInt(java.lang.String, android.animation.TypeConverter<T, int[]>, android.animation.TypeEvaluator<T>, android.animation.Keyframe...);
     method public static android.animation.PropertyValuesHolder ofObject(java.lang.String, android.animation.TypeEvaluator, java.lang.Object...);
     method public static android.animation.PropertyValuesHolder ofObject(java.lang.String, android.animation.TypeConverter<android.graphics.PointF, ?>, android.graphics.Path);
-    method public static android.animation.PropertyValuesHolder ofObject(android.util.Property, android.animation.TypeEvaluator<V>, V...);
-    method public static android.animation.PropertyValuesHolder ofObject(android.util.Property<?, V>, android.animation.TypeConverter<T, V>, android.animation.TypeEvaluator<T>, T...);
-    method public static android.animation.PropertyValuesHolder ofObject(android.util.Property<?, V>, android.animation.TypeConverter<android.graphics.PointF, V>, android.graphics.Path);
+    method public static <V> android.animation.PropertyValuesHolder ofObject(android.util.Property, android.animation.TypeEvaluator<V>, V...);
+    method public static <T, V> android.animation.PropertyValuesHolder ofObject(android.util.Property<?, V>, android.animation.TypeConverter<T, V>, android.animation.TypeEvaluator<T>, T...);
+    method public static <V> android.animation.PropertyValuesHolder ofObject(android.util.Property<?, V>, android.animation.TypeConverter<android.graphics.PointF, V>, android.graphics.Path);
     method public void setConverter(android.animation.TypeConverter);
     method public void setEvaluator(android.animation.TypeEvaluator);
     method public void setFloatValues(float...);
@@ -3353,12 +3354,12 @@
     method public abstract float getInterpolation(float);
   }
 
-  public abstract class TypeConverter {
+  public abstract class TypeConverter<T, V> {
     ctor public TypeConverter(java.lang.Class<T>, java.lang.Class<V>);
     method public abstract V convert(T);
   }
 
-  public abstract interface TypeEvaluator {
+  public abstract interface TypeEvaluator<T> {
     method public abstract T evaluate(float, T, T);
   }
 
@@ -4706,7 +4707,7 @@
     method public android.os.Parcelable saveAllState();
   }
 
-  public abstract class FragmentHostCallback extends android.app.FragmentContainer {
+  public abstract class FragmentHostCallback<E> extends android.app.FragmentContainer {
     ctor public FragmentHostCallback(android.content.Context, android.os.Handler, int);
     method public void onAttachFragment(android.app.Fragment);
     method public void onDump(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
@@ -4973,12 +4974,12 @@
     method public abstract void destroyLoader(int);
     method public abstract void dump(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
     method public static void enableDebugLogging(boolean);
-    method public abstract android.content.Loader<D> getLoader(int);
-    method public abstract android.content.Loader<D> initLoader(int, android.os.Bundle, android.app.LoaderManager.LoaderCallbacks<D>);
-    method public abstract android.content.Loader<D> restartLoader(int, android.os.Bundle, android.app.LoaderManager.LoaderCallbacks<D>);
+    method public abstract <D> android.content.Loader<D> getLoader(int);
+    method public abstract <D> android.content.Loader<D> initLoader(int, android.os.Bundle, android.app.LoaderManager.LoaderCallbacks<D>);
+    method public abstract <D> android.content.Loader<D> restartLoader(int, android.os.Bundle, android.app.LoaderManager.LoaderCallbacks<D>);
   }
 
-  public static abstract interface LoaderManager.LoaderCallbacks {
+  public static abstract interface LoaderManager.LoaderCallbacks<D> {
     method public abstract android.content.Loader<D> onCreateLoader(int, android.os.Bundle);
     method public abstract void onLoadFinished(android.content.Loader<D>, D);
     method public abstract void onLoaderReset(android.content.Loader<D>);
@@ -6674,6 +6675,7 @@
     method public abstract java.util.List<android.app.job.JobInfo> getAllPendingJobs();
     method public abstract android.app.job.JobInfo getPendingJob(int);
     method public abstract int schedule(android.app.job.JobInfo);
+    method public abstract int scheduleAsPackage(android.app.job.JobInfo, java.lang.String, int, java.lang.String);
     field public static final int RESULT_FAILURE = 0; // 0x0
     field public static final int RESULT_SUCCESS = 1; // 0x1
   }
@@ -7924,7 +7926,7 @@
     ctor public AsyncQueryHandler.WorkerHandler(android.os.Looper);
   }
 
-  public abstract class AsyncTaskLoader extends android.content.Loader {
+  public abstract class AsyncTaskLoader<D> extends android.content.Loader {
     ctor public AsyncTaskLoader(android.content.Context);
     method public void cancelLoadInBackground();
     method public boolean isLoadInBackgroundCanceled();
@@ -8106,7 +8108,7 @@
     method public android.os.ParcelFileDescriptor openFile(android.net.Uri, java.lang.String) throws java.io.FileNotFoundException;
     method public android.os.ParcelFileDescriptor openFile(android.net.Uri, java.lang.String, android.os.CancellationSignal) throws java.io.FileNotFoundException;
     method protected final android.os.ParcelFileDescriptor openFileHelper(android.net.Uri, java.lang.String) throws java.io.FileNotFoundException;
-    method public android.os.ParcelFileDescriptor openPipeHelper(android.net.Uri, java.lang.String, android.os.Bundle, T, android.content.ContentProvider.PipeDataWriter<T>) throws java.io.FileNotFoundException;
+    method public <T> android.os.ParcelFileDescriptor openPipeHelper(android.net.Uri, java.lang.String, android.os.Bundle, T, android.content.ContentProvider.PipeDataWriter<T>) throws java.io.FileNotFoundException;
     method public android.content.res.AssetFileDescriptor openTypedAssetFile(android.net.Uri, java.lang.String, android.os.Bundle) throws java.io.FileNotFoundException;
     method public android.content.res.AssetFileDescriptor openTypedAssetFile(android.net.Uri, java.lang.String, android.os.Bundle, android.os.CancellationSignal) throws java.io.FileNotFoundException;
     method public abstract android.database.Cursor query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String);
@@ -8119,7 +8121,7 @@
     method public abstract int update(android.net.Uri, android.content.ContentValues, java.lang.String, java.lang.String[]);
   }
 
-  public static abstract interface ContentProvider.PipeDataWriter {
+  public static abstract interface ContentProvider.PipeDataWriter<T> {
     method public abstract void writeDataToPipe(android.os.ParcelFileDescriptor, android.net.Uri, java.lang.String, android.os.Bundle, T);
   }
 
@@ -8392,7 +8394,7 @@
     method public final java.lang.String getString(int);
     method public final java.lang.String getString(int, java.lang.Object...);
     method public abstract java.lang.Object getSystemService(java.lang.String);
-    method public final T getSystemService(java.lang.Class<T>);
+    method public final <T> T getSystemService(java.lang.Class<T>);
     method public abstract java.lang.String getSystemServiceName(java.lang.Class<?>);
     method public final java.lang.CharSequence getText(int);
     method public abstract android.content.res.Resources.Theme getTheme();
@@ -8760,8 +8762,8 @@
     method public long getLongExtra(java.lang.String, long);
     method public java.lang.String getPackage();
     method public android.os.Parcelable[] getParcelableArrayExtra(java.lang.String);
-    method public java.util.ArrayList<T> getParcelableArrayListExtra(java.lang.String);
-    method public T getParcelableExtra(java.lang.String);
+    method public <T extends android.os.Parcelable> java.util.ArrayList<T> getParcelableArrayListExtra(java.lang.String);
+    method public <T extends android.os.Parcelable> T getParcelableExtra(java.lang.String);
     method public java.lang.String getScheme();
     method public android.content.Intent getSelector();
     method public java.io.Serializable getSerializableExtra(java.lang.String);
@@ -9248,7 +9250,7 @@
     ctor public IntentSender.SendIntentException(java.lang.Exception);
   }
 
-  public class Loader {
+  public class Loader<D> {
     ctor public Loader(android.content.Context);
     method public void abandon();
     method public boolean cancelLoad();
@@ -9285,11 +9287,11 @@
     ctor public Loader.ForceLoadContentObserver();
   }
 
-  public static abstract interface Loader.OnLoadCanceledListener {
+  public static abstract interface Loader.OnLoadCanceledListener<D> {
     method public abstract void onLoadCanceled(android.content.Loader<D>);
   }
 
-  public static abstract interface Loader.OnLoadCompleteListener {
+  public static abstract interface Loader.OnLoadCompleteListener<D> {
     method public abstract void onLoadComplete(android.content.Loader<D>, D);
   }
 
@@ -11177,7 +11179,7 @@
     method public boolean isNull(int);
   }
 
-  public abstract class Observable {
+  public abstract class Observable<T> {
     ctor public Observable();
     method public void registerObserver(T);
     method public void unregisterAll();
@@ -13067,7 +13069,7 @@
   public class AnimatedStateListDrawable extends android.graphics.drawable.StateListDrawable {
     ctor public AnimatedStateListDrawable();
     method public void addState(int[], android.graphics.drawable.Drawable, int);
-    method public void addTransition(int, int, T, boolean);
+    method public <T extends android.graphics.drawable.Drawable & android.graphics.drawable.Animatable> void addTransition(int, int, T, boolean);
   }
 
   public class AnimatedVectorDrawable extends android.graphics.drawable.Drawable implements android.graphics.drawable.Animatable2 {
@@ -14199,7 +14201,7 @@
   }
 
   public final class CameraCharacteristics extends android.hardware.camera2.CameraMetadata {
-    method public T get(android.hardware.camera2.CameraCharacteristics.Key<T>);
+    method public <T> T get(android.hardware.camera2.CameraCharacteristics.Key<T>);
     method public java.util.List<android.hardware.camera2.CaptureRequest.Key<?>> getAvailableCaptureRequestKeys();
     method public java.util.List<android.hardware.camera2.CaptureResult.Key<?>> getAvailableCaptureResultKeys();
     field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES;
@@ -14284,7 +14286,7 @@
     field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> TONEMAP_MAX_CURVE_POINTS;
   }
 
-  public static final class CameraCharacteristics.Key {
+  public static final class CameraCharacteristics.Key<T> {
     method public final boolean equals(java.lang.Object);
     method public java.lang.String getName();
     method public final int hashCode();
@@ -14349,7 +14351,7 @@
     method public void onTorchModeUnavailable(java.lang.String);
   }
 
-  public abstract class CameraMetadata {
+  public abstract class CameraMetadata<TKey> {
     method public java.util.List<TKey> getKeys();
     field public static final int COLOR_CORRECTION_ABERRATION_MODE_FAST = 1; // 0x1
     field public static final int COLOR_CORRECTION_ABERRATION_MODE_HIGH_QUALITY = 2; // 0x2
@@ -14557,7 +14559,7 @@
 
   public final class CaptureRequest extends android.hardware.camera2.CameraMetadata implements android.os.Parcelable {
     method public int describeContents();
-    method public T get(android.hardware.camera2.CaptureRequest.Key<T>);
+    method public <T> T get(android.hardware.camera2.CaptureRequest.Key<T>);
     method public java.lang.Object getTag();
     method public boolean isReprocess();
     method public void writeToParcel(android.os.Parcel, int);
@@ -14620,20 +14622,20 @@
   public static final class CaptureRequest.Builder {
     method public void addTarget(android.view.Surface);
     method public android.hardware.camera2.CaptureRequest build();
-    method public T get(android.hardware.camera2.CaptureRequest.Key<T>);
+    method public <T> T get(android.hardware.camera2.CaptureRequest.Key<T>);
     method public void removeTarget(android.view.Surface);
-    method public void set(android.hardware.camera2.CaptureRequest.Key<T>, T);
+    method public <T> void set(android.hardware.camera2.CaptureRequest.Key<T>, T);
     method public void setTag(java.lang.Object);
   }
 
-  public static final class CaptureRequest.Key {
+  public static final class CaptureRequest.Key<T> {
     method public final boolean equals(java.lang.Object);
     method public java.lang.String getName();
     method public final int hashCode();
   }
 
   public class CaptureResult extends android.hardware.camera2.CameraMetadata {
-    method public T get(android.hardware.camera2.CaptureResult.Key<T>);
+    method public <T> T get(android.hardware.camera2.CaptureResult.Key<T>);
     method public long getFrameNumber();
     method public android.hardware.camera2.CaptureRequest getRequest();
     method public int getSequenceId();
@@ -14714,7 +14716,7 @@
     field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> TONEMAP_PRESET_CURVE;
   }
 
-  public static final class CaptureResult.Key {
+  public static final class CaptureResult.Key<T> {
     method public final boolean equals(java.lang.Object);
     method public java.lang.String getName();
     method public final int hashCode();
@@ -14846,14 +14848,14 @@
     method public android.util.Size[] getInputSizes(int);
     method public final int[] getOutputFormats();
     method public long getOutputMinFrameDuration(int, android.util.Size);
-    method public long getOutputMinFrameDuration(java.lang.Class<T>, android.util.Size);
-    method public android.util.Size[] getOutputSizes(java.lang.Class<T>);
+    method public <T> long getOutputMinFrameDuration(java.lang.Class<T>, android.util.Size);
+    method public <T> android.util.Size[] getOutputSizes(java.lang.Class<T>);
     method public android.util.Size[] getOutputSizes(int);
     method public long getOutputStallDuration(int, android.util.Size);
-    method public long getOutputStallDuration(java.lang.Class<T>, android.util.Size);
+    method public <T> long getOutputStallDuration(java.lang.Class<T>, android.util.Size);
     method public final int[] getValidOutputFormatsForInput(int);
     method public boolean isOutputSupportedFor(int);
-    method public static boolean isOutputSupportedFor(java.lang.Class<T>);
+    method public static <T> boolean isOutputSupportedFor(java.lang.Class<T>);
     method public boolean isOutputSupportedFor(android.view.Surface);
   }
 
@@ -17301,7 +17303,7 @@
 
 package android.icu.text {
 
-  public final class AlphabeticIndex implements java.lang.Iterable {
+  public final class AlphabeticIndex<V> implements java.lang.Iterable {
     ctor public AlphabeticIndex(android.icu.util.ULocale);
     ctor public AlphabeticIndex(java.util.Locale);
     ctor public AlphabeticIndex(android.icu.text.RuleBasedCollator);
@@ -17327,7 +17329,7 @@
     method public android.icu.text.AlphabeticIndex<V> setUnderflowLabel(java.lang.String);
   }
 
-  public static class AlphabeticIndex.Bucket implements java.lang.Iterable {
+  public static class AlphabeticIndex.Bucket<V> implements java.lang.Iterable {
     method public java.lang.String getLabel();
     method public android.icu.text.AlphabeticIndex.Bucket.LabelType getLabelType();
     method public java.util.Iterator<android.icu.text.AlphabeticIndex.Record<V>> iterator();
@@ -17343,14 +17345,14 @@
     enum_constant public static final android.icu.text.AlphabeticIndex.Bucket.LabelType UNDERFLOW;
   }
 
-  public static final class AlphabeticIndex.ImmutableIndex implements java.lang.Iterable {
+  public static final class AlphabeticIndex.ImmutableIndex<V> implements java.lang.Iterable {
     method public android.icu.text.AlphabeticIndex.Bucket<V> getBucket(int);
     method public int getBucketCount();
     method public int getBucketIndex(java.lang.CharSequence);
     method public java.util.Iterator<android.icu.text.AlphabeticIndex.Bucket<V>> iterator();
   }
 
-  public static class AlphabeticIndex.Record {
+  public static class AlphabeticIndex.Record<V> {
     method public V getData();
     method public java.lang.CharSequence getName();
   }
@@ -18863,8 +18865,8 @@
     method public final android.icu.text.UnicodeSet addAll(java.lang.CharSequence);
     method public android.icu.text.UnicodeSet addAll(android.icu.text.UnicodeSet);
     method public android.icu.text.UnicodeSet addAll(java.lang.Iterable<?>);
-    method public android.icu.text.UnicodeSet addAll(T...);
-    method public T addAllTo(T);
+    method public <T extends java.lang.CharSequence> android.icu.text.UnicodeSet addAll(T...);
+    method public <T extends java.util.Collection<java.lang.String>> T addAllTo(T);
     method public void addMatchSetTo(android.icu.text.UnicodeSet);
     method public android.icu.text.UnicodeSet applyIntPropertyValue(int, int);
     method public final android.icu.text.UnicodeSet applyPattern(java.lang.String);
@@ -18892,15 +18894,15 @@
     method public final boolean contains(java.lang.CharSequence);
     method public boolean containsAll(android.icu.text.UnicodeSet);
     method public boolean containsAll(java.lang.String);
-    method public boolean containsAll(java.lang.Iterable<T>);
+    method public <T extends java.lang.CharSequence> boolean containsAll(java.lang.Iterable<T>);
     method public boolean containsNone(int, int);
     method public boolean containsNone(android.icu.text.UnicodeSet);
     method public boolean containsNone(java.lang.CharSequence);
-    method public boolean containsNone(java.lang.Iterable<T>);
+    method public <T extends java.lang.CharSequence> boolean containsNone(java.lang.Iterable<T>);
     method public final boolean containsSome(int, int);
     method public final boolean containsSome(android.icu.text.UnicodeSet);
     method public final boolean containsSome(java.lang.CharSequence);
-    method public final boolean containsSome(java.lang.Iterable<T>);
+    method public final <T extends java.lang.CharSequence> boolean containsSome(java.lang.Iterable<T>);
     method public android.icu.text.UnicodeSet freeze();
     method public static android.icu.text.UnicodeSet from(java.lang.CharSequence);
     method public static android.icu.text.UnicodeSet fromAll(java.lang.CharSequence);
@@ -18918,14 +18920,14 @@
     method public final android.icu.text.UnicodeSet remove(java.lang.CharSequence);
     method public final android.icu.text.UnicodeSet removeAll(java.lang.CharSequence);
     method public android.icu.text.UnicodeSet removeAll(android.icu.text.UnicodeSet);
-    method public android.icu.text.UnicodeSet removeAll(java.lang.Iterable<T>);
+    method public <T extends java.lang.CharSequence> android.icu.text.UnicodeSet removeAll(java.lang.Iterable<T>);
     method public final android.icu.text.UnicodeSet removeAllStrings();
     method public android.icu.text.UnicodeSet retain(int, int);
     method public final android.icu.text.UnicodeSet retain(int);
     method public final android.icu.text.UnicodeSet retain(java.lang.CharSequence);
     method public final android.icu.text.UnicodeSet retainAll(java.lang.CharSequence);
     method public android.icu.text.UnicodeSet retainAll(android.icu.text.UnicodeSet);
-    method public android.icu.text.UnicodeSet retainAll(java.lang.Iterable<T>);
+    method public <T extends java.lang.CharSequence> android.icu.text.UnicodeSet retainAll(java.lang.Iterable<T>);
     method public android.icu.text.UnicodeSet set(int, int);
     method public android.icu.text.UnicodeSet set(android.icu.text.UnicodeSet);
     method public int size();
@@ -19335,7 +19337,7 @@
     method public long getToDate();
   }
 
-  public abstract interface Freezable implements java.lang.Cloneable {
+  public abstract interface Freezable<T> implements java.lang.Cloneable {
     method public abstract T cloneAsThawed();
     method public abstract T freeze();
     method public abstract boolean isFrozen();
@@ -19617,7 +19619,7 @@
     field public static final android.icu.util.TimeUnit YEAR;
   }
 
-  public class Output {
+  public class Output<T> {
     ctor public Output();
     ctor public Output(T);
     field public T value;
@@ -30507,7 +30509,7 @@
 
 package android.os {
 
-  public abstract class AsyncTask {
+  public abstract class AsyncTask<Params, Progress, Result> {
     ctor public AsyncTask();
     method public final boolean cancel(boolean);
     method protected abstract Result doInBackground(Params...);
@@ -30734,16 +30736,16 @@
     method public float getFloat(java.lang.String, float);
     method public float[] getFloatArray(java.lang.String);
     method public java.util.ArrayList<java.lang.Integer> getIntegerArrayList(java.lang.String);
-    method public T getParcelable(java.lang.String);
+    method public <T extends android.os.Parcelable> T getParcelable(java.lang.String);
     method public android.os.Parcelable[] getParcelableArray(java.lang.String);
-    method public java.util.ArrayList<T> getParcelableArrayList(java.lang.String);
+    method public <T extends android.os.Parcelable> java.util.ArrayList<T> getParcelableArrayList(java.lang.String);
     method public java.io.Serializable getSerializable(java.lang.String);
     method public short getShort(java.lang.String);
     method public short getShort(java.lang.String, short);
     method public short[] getShortArray(java.lang.String);
     method public android.util.Size getSize(java.lang.String);
     method public android.util.SizeF getSizeF(java.lang.String);
-    method public android.util.SparseArray<T> getSparseParcelableArray(java.lang.String);
+    method public <T extends android.os.Parcelable> android.util.SparseArray<T> getSparseParcelableArray(java.lang.String);
     method public java.util.ArrayList<java.lang.String> getStringArrayList(java.lang.String);
     method public boolean hasFileDescriptors();
     method public void putAll(android.os.Bundle);
@@ -31248,8 +31250,8 @@
     method public final long[] createLongArray();
     method public final java.lang.String[] createStringArray();
     method public final java.util.ArrayList<java.lang.String> createStringArrayList();
-    method public final T[] createTypedArray(android.os.Parcelable.Creator<T>);
-    method public final java.util.ArrayList<T> createTypedArrayList(android.os.Parcelable.Creator<T>);
+    method public final <T> T[] createTypedArray(android.os.Parcelable.Creator<T>);
+    method public final <T> java.util.ArrayList<T> createTypedArrayList(android.os.Parcelable.Creator<T>);
     method public final int dataAvail();
     method public final int dataCapacity();
     method public final int dataPosition();
@@ -31282,7 +31284,7 @@
     method public final long readLong();
     method public final void readLongArray(long[]);
     method public final void readMap(java.util.Map, java.lang.ClassLoader);
-    method public final T readParcelable(java.lang.ClassLoader);
+    method public final <T extends android.os.Parcelable> T readParcelable(java.lang.ClassLoader);
     method public final android.os.Parcelable[] readParcelableArray(java.lang.ClassLoader);
     method public final android.os.PersistableBundle readPersistableBundle();
     method public final android.os.PersistableBundle readPersistableBundle(java.lang.ClassLoader);
@@ -31295,9 +31297,9 @@
     method public final void readStringArray(java.lang.String[]);
     method public final void readStringList(java.util.List<java.lang.String>);
     method public final android.os.IBinder readStrongBinder();
-    method public final void readTypedArray(T[], android.os.Parcelable.Creator<T>);
-    method public final void readTypedList(java.util.List<T>, android.os.Parcelable.Creator<T>);
-    method public final T readTypedObject(android.os.Parcelable.Creator<T>);
+    method public final <T> void readTypedArray(T[], android.os.Parcelable.Creator<T>);
+    method public final <T> void readTypedList(java.util.List<T>, android.os.Parcelable.Creator<T>);
+    method public final <T> T readTypedObject(android.os.Parcelable.Creator<T>);
     method public final java.lang.Object readValue(java.lang.ClassLoader);
     method public final void recycle();
     method public final void setDataCapacity(int);
@@ -31328,7 +31330,7 @@
     method public final void writeMap(java.util.Map);
     method public final void writeNoException();
     method public final void writeParcelable(android.os.Parcelable, int);
-    method public final void writeParcelableArray(T[], int);
+    method public final <T extends android.os.Parcelable> void writeParcelableArray(T[], int);
     method public final void writePersistableBundle(android.os.PersistableBundle);
     method public final void writeSerializable(java.io.Serializable);
     method public final void writeSize(android.util.Size);
@@ -31340,9 +31342,9 @@
     method public final void writeStringList(java.util.List<java.lang.String>);
     method public final void writeStrongBinder(android.os.IBinder);
     method public final void writeStrongInterface(android.os.IInterface);
-    method public final void writeTypedArray(T[], int);
-    method public final void writeTypedList(java.util.List<T>);
-    method public final void writeTypedObject(T, int);
+    method public final <T extends android.os.Parcelable> void writeTypedArray(T[], int);
+    method public final <T extends android.os.Parcelable> void writeTypedList(java.util.List<T>);
+    method public final <T extends android.os.Parcelable> void writeTypedObject(T, int);
     method public final void writeValue(java.lang.Object);
     field public static final android.os.Parcelable.Creator<java.lang.String> STRING_CREATOR;
   }
@@ -31420,11 +31422,11 @@
     field public static final int PARCELABLE_WRITE_RETURN_VALUE = 1; // 0x1
   }
 
-  public static abstract interface Parcelable.ClassLoaderCreator implements android.os.Parcelable.Creator {
+  public static abstract interface Parcelable.ClassLoaderCreator<T> implements android.os.Parcelable.Creator {
     method public abstract T createFromParcel(android.os.Parcel, java.lang.ClassLoader);
   }
 
-  public static abstract interface Parcelable.Creator {
+  public static abstract interface Parcelable.Creator<T> {
     method public abstract T createFromParcel(android.os.Parcel);
     method public abstract T[] newArray(int);
   }
@@ -31565,7 +31567,7 @@
     method public abstract void onResult(android.os.Bundle);
   }
 
-  public class RemoteCallbackList {
+  public class RemoteCallbackList<E extends android.os.IInterface> {
     ctor public RemoteCallbackList();
     method public int beginBroadcast();
     method public void finishBroadcast();
@@ -37115,7 +37117,7 @@
     field public static final java.lang.String SERVICE_INTERFACE = "android.service.carrier.CarrierMessagingService";
   }
 
-  public static abstract interface CarrierMessagingService.ResultCallback {
+  public static abstract interface CarrierMessagingService.ResultCallback<T> {
     method public abstract void onReceiveResult(T) throws android.os.RemoteException;
   }
 
@@ -37266,7 +37268,7 @@
     field public static final java.lang.String EXTRA_SUGGESTED = "android.service.media.extra.SUGGESTED";
   }
 
-  public class MediaBrowserService.Result {
+  public class MediaBrowserService.Result<T> {
     method public void detach();
     method public void sendResult(T);
   }
@@ -40409,14 +40411,14 @@
 
 package android.test {
 
-  public abstract deprecated class ActivityInstrumentationTestCase extends android.test.ActivityTestCase {
+  public abstract deprecated class ActivityInstrumentationTestCase<T extends android.app.Activity> extends android.test.ActivityTestCase {
     ctor public ActivityInstrumentationTestCase(java.lang.String, java.lang.Class<T>);
     ctor public ActivityInstrumentationTestCase(java.lang.String, java.lang.Class<T>, boolean);
     method public T getActivity();
     method public void testActivityTestCaseSetUpProperly() throws java.lang.Exception;
   }
 
-  public abstract deprecated class ActivityInstrumentationTestCase2 extends android.test.ActivityTestCase {
+  public abstract deprecated class ActivityInstrumentationTestCase2<T extends android.app.Activity> extends android.test.ActivityTestCase {
     ctor public deprecated ActivityInstrumentationTestCase2(java.lang.String, java.lang.Class<T>);
     ctor public ActivityInstrumentationTestCase2(java.lang.Class<T>);
     method public T getActivity();
@@ -40431,7 +40433,7 @@
     method protected void setActivity(android.app.Activity);
   }
 
-  public abstract deprecated class ActivityUnitTestCase extends android.test.ActivityTestCase {
+  public abstract deprecated class ActivityUnitTestCase<T extends android.app.Activity> extends android.test.ActivityTestCase {
     ctor public ActivityUnitTestCase(java.lang.Class<T>);
     method public T getActivity();
     method public int getFinishedActivityRequest();
@@ -40477,7 +40479,7 @@
     method public void testStarted(java.lang.String);
   }
 
-  public abstract deprecated class ApplicationTestCase extends android.test.AndroidTestCase {
+  public abstract deprecated class ApplicationTestCase<T extends android.app.Application> extends android.test.AndroidTestCase {
     ctor public ApplicationTestCase(java.lang.Class<T>);
     method protected final void createApplication();
     method public T getApplication();
@@ -40503,8 +40505,8 @@
     method public android.app.Instrumentation getInstrumentation();
     method public deprecated void injectInsrumentation(android.app.Instrumentation);
     method public void injectInstrumentation(android.app.Instrumentation);
-    method public final T launchActivity(java.lang.String, java.lang.Class<T>, android.os.Bundle);
-    method public final T launchActivityWithIntent(java.lang.String, java.lang.Class<T>, android.content.Intent);
+    method public final <T extends android.app.Activity> T launchActivity(java.lang.String, java.lang.Class<T>, android.os.Bundle);
+    method public final <T extends android.app.Activity> T launchActivityWithIntent(java.lang.String, java.lang.Class<T>, android.content.Intent);
     method public void runTestOnUiThread(java.lang.Runnable) throws java.lang.Throwable;
     method public void sendKeys(java.lang.String);
     method public void sendKeys(int...);
@@ -40544,7 +40546,7 @@
 
   public class LoaderTestCase extends android.test.AndroidTestCase {
     ctor public LoaderTestCase();
-    method public T getLoaderResultSynchronously(android.content.Loader<T>);
+    method public <T> T getLoaderResultSynchronously(android.content.Loader<T>);
   }
 
   public final deprecated class MoreAsserts {
@@ -40599,20 +40601,20 @@
     method public abstract void startTiming(boolean);
   }
 
-  public abstract deprecated class ProviderTestCase extends android.test.InstrumentationTestCase {
+  public abstract deprecated class ProviderTestCase<T extends android.content.ContentProvider> extends android.test.InstrumentationTestCase {
     ctor public ProviderTestCase(java.lang.Class<T>, java.lang.String);
     method public android.test.mock.MockContentResolver getMockContentResolver();
     method public android.test.IsolatedContext getMockContext();
     method public T getProvider();
-    method public static android.content.ContentResolver newResolverWithContentProviderFromSql(android.content.Context, java.lang.Class<T>, java.lang.String, java.lang.String, int, java.lang.String) throws java.lang.IllegalAccessException, java.lang.InstantiationException;
+    method public static <T extends android.content.ContentProvider> android.content.ContentResolver newResolverWithContentProviderFromSql(android.content.Context, java.lang.Class<T>, java.lang.String, java.lang.String, int, java.lang.String) throws java.lang.IllegalAccessException, java.lang.InstantiationException;
   }
 
-  public abstract class ProviderTestCase2 extends android.test.AndroidTestCase {
+  public abstract class ProviderTestCase2<T extends android.content.ContentProvider> extends android.test.AndroidTestCase {
     ctor public ProviderTestCase2(java.lang.Class<T>, java.lang.String);
     method public android.test.mock.MockContentResolver getMockContentResolver();
     method public android.test.IsolatedContext getMockContext();
     method public T getProvider();
-    method public static android.content.ContentResolver newResolverWithContentProviderFromSql(android.content.Context, java.lang.String, java.lang.Class<T>, java.lang.String, java.lang.String, int, java.lang.String) throws java.lang.IllegalAccessException, java.lang.InstantiationException;
+    method public static <T extends android.content.ContentProvider> android.content.ContentResolver newResolverWithContentProviderFromSql(android.content.Context, java.lang.String, java.lang.Class<T>, java.lang.String, java.lang.String, int, java.lang.String) throws java.lang.IllegalAccessException, java.lang.InstantiationException;
   }
 
   public deprecated class RenamingDelegatingContext extends android.content.ContextWrapper {
@@ -40620,11 +40622,11 @@
     ctor public RenamingDelegatingContext(android.content.Context, android.content.Context, java.lang.String);
     method public java.lang.String getDatabasePrefix();
     method public void makeExistingFilesAndDbsAccessible();
-    method public static T providerWithRenamedContext(java.lang.Class<T>, android.content.Context, java.lang.String) throws java.lang.IllegalAccessException, java.lang.InstantiationException;
-    method public static T providerWithRenamedContext(java.lang.Class<T>, android.content.Context, java.lang.String, boolean) throws java.lang.IllegalAccessException, java.lang.InstantiationException;
+    method public static <T extends android.content.ContentProvider> T providerWithRenamedContext(java.lang.Class<T>, android.content.Context, java.lang.String) throws java.lang.IllegalAccessException, java.lang.InstantiationException;
+    method public static <T extends android.content.ContentProvider> T providerWithRenamedContext(java.lang.Class<T>, android.content.Context, java.lang.String, boolean) throws java.lang.IllegalAccessException, java.lang.InstantiationException;
   }
 
-  public abstract deprecated class ServiceTestCase extends android.test.AndroidTestCase {
+  public abstract deprecated class ServiceTestCase<T extends android.app.Service> extends android.test.AndroidTestCase {
     ctor public ServiceTestCase(java.lang.Class<T>);
     method protected android.os.IBinder bindService(android.content.Intent);
     method public android.app.Application getApplication();
@@ -40637,7 +40639,7 @@
     method public void testServiceTestCaseSetUpProperly() throws java.lang.Exception;
   }
 
-  public abstract deprecated class SingleLaunchActivityTestCase extends android.test.InstrumentationTestCase {
+  public abstract deprecated class SingleLaunchActivityTestCase<T extends android.app.Activity> extends android.test.InstrumentationTestCase {
     ctor public SingleLaunchActivityTestCase(java.lang.String, java.lang.Class<T>);
     method public T getActivity();
     method public void testActivityTestCaseSetUpProperly() throws java.lang.Exception;
@@ -41004,7 +41006,7 @@
     ctor public TestMethod(java.lang.String, java.lang.Class<? extends junit.framework.TestCase>);
     ctor public TestMethod(junit.framework.TestCase);
     method public junit.framework.TestCase createTest() throws java.lang.IllegalAccessException, java.lang.InstantiationException, java.lang.reflect.InvocationTargetException;
-    method public T getAnnotation(java.lang.Class<T>);
+    method public <T extends java.lang.annotation.Annotation> T getAnnotation(java.lang.Class<T>);
     method public java.lang.Class<? extends junit.framework.TestCase> getEnclosingClass();
     method public java.lang.String getEnclosingClassname();
     method public java.lang.String getName();
@@ -41447,7 +41449,7 @@
     method public int getSpanEnd(java.lang.Object);
     method public int getSpanFlags(java.lang.Object);
     method public int getSpanStart(java.lang.Object);
-    method public T[] getSpans(int, int, java.lang.Class<T>);
+    method public <T> T[] getSpans(int, int, java.lang.Class<T>);
     method public deprecated int getTextRunCursor(int, int, int, int, int, android.graphics.Paint);
     method public int getTextWatcherDepth();
     method public android.text.SpannableStringBuilder insert(int, java.lang.CharSequence, int, int);
@@ -41469,7 +41471,7 @@
     method public int getSpanEnd(java.lang.Object);
     method public int getSpanFlags(java.lang.Object);
     method public int getSpanStart(java.lang.Object);
-    method public T[] getSpans(int, int, java.lang.Class<T>);
+    method public <T> T[] getSpans(int, int, java.lang.Class<T>);
     method public final int length();
     method public int nextSpanTransition(int, int, java.lang.Class);
     method public final java.lang.String toString();
@@ -41479,7 +41481,7 @@
     method public abstract int getSpanEnd(java.lang.Object);
     method public abstract int getSpanFlags(java.lang.Object);
     method public abstract int getSpanStart(java.lang.Object);
-    method public abstract T[] getSpans(int, int, java.lang.Class<T>);
+    method public abstract <T> T[] getSpans(int, int, java.lang.Class<T>);
     method public abstract int nextSpanTransition(int, int, java.lang.Class);
     field public static final int SPAN_COMPOSING = 256; // 0x100
     field public static final int SPAN_EXCLUSIVE_EXCLUSIVE = 33; // 0x21
@@ -42456,7 +42458,7 @@
     field public static final int WEEKDAY_WEDNESDAY = 4; // 0x4
   }
 
-  public static class TtsSpan.Builder {
+  public static class TtsSpan.Builder<C extends android.text.style.TtsSpan.Builder<?>> {
     ctor public TtsSpan.Builder(java.lang.String);
     method public android.text.style.TtsSpan build();
     method public C setIntArgument(java.lang.String, int);
@@ -42552,7 +42554,7 @@
     method public android.text.style.TtsSpan.OrdinalBuilder setNumber(java.lang.String);
   }
 
-  public static class TtsSpan.SemioticClassBuilder extends android.text.style.TtsSpan.Builder {
+  public static class TtsSpan.SemioticClassBuilder<C extends android.text.style.TtsSpan.SemioticClassBuilder<?>> extends android.text.style.TtsSpan.Builder {
     ctor public TtsSpan.SemioticClassBuilder(java.lang.String);
     method public C setAnimacy(java.lang.String);
     method public C setCase(java.lang.String);
@@ -42959,7 +42961,7 @@
     ctor public AndroidRuntimeException(java.lang.Exception);
   }
 
-  public final class ArrayMap implements java.util.Map {
+  public final class ArrayMap<K, V> implements java.util.Map {
     ctor public ArrayMap();
     ctor public ArrayMap(int);
     ctor public ArrayMap(android.util.ArrayMap<K, V>);
@@ -42987,7 +42989,7 @@
     method public java.util.Collection<V> values();
   }
 
-  public final class ArraySet implements java.util.Collection java.util.Set {
+  public final class ArraySet<E> implements java.util.Collection java.util.Set {
     ctor public ArraySet();
     ctor public ArraySet(int);
     ctor public ArraySet(android.util.ArraySet<E>);
@@ -43008,7 +43010,7 @@
     method public boolean retainAll(java.util.Collection<?>);
     method public int size();
     method public java.lang.Object[] toArray();
-    method public T[] toArray(T[]);
+    method public <T> T[] toArray(T[]);
     method public E valueAt(int);
   }
 
@@ -43150,13 +43152,13 @@
   public deprecated class FloatMath {
   }
 
-  public abstract class FloatProperty extends android.util.Property {
+  public abstract class FloatProperty<T> extends android.util.Property {
     ctor public FloatProperty(java.lang.String);
     method public final void set(T, java.lang.Float);
     method public abstract void setValue(T, float);
   }
 
-  public abstract class IntProperty extends android.util.Property {
+  public abstract class IntProperty<T> extends android.util.Property {
     ctor public IntProperty(java.lang.String);
     method public final void set(T, java.lang.Integer);
     method public abstract void setValue(T, int);
@@ -43256,7 +43258,7 @@
     method public void println(java.lang.String);
   }
 
-  public class LongSparseArray implements java.lang.Cloneable {
+  public class LongSparseArray<E> implements java.lang.Cloneable {
     ctor public LongSparseArray();
     ctor public LongSparseArray(int);
     method public void append(long, E);
@@ -43276,7 +43278,7 @@
     method public E valueAt(int);
   }
 
-  public class LruCache {
+  public class LruCache<K, V> {
     ctor public LruCache(int);
     method protected V create(K);
     method public final synchronized int createCount();
@@ -43364,9 +43366,9 @@
     ctor public NoSuchPropertyException(java.lang.String);
   }
 
-  public class Pair {
+  public class Pair<F, S> {
     ctor public Pair(F, S);
-    method public static android.util.Pair<A, B> create(A, B);
+    method public static <A, B> android.util.Pair<A, B> create(A, B);
     field public final F first;
     field public final S second;
   }
@@ -43399,22 +43401,22 @@
     method public abstract void println(java.lang.String);
   }
 
-  public abstract class Property {
+  public abstract class Property<T, V> {
     ctor public Property(java.lang.Class<V>, java.lang.String);
     method public abstract V get(T);
     method public java.lang.String getName();
     method public java.lang.Class<V> getType();
     method public boolean isReadOnly();
-    method public static android.util.Property<T, V> of(java.lang.Class<T>, java.lang.Class<V>, java.lang.String);
+    method public static <T, V> android.util.Property<T, V> of(java.lang.Class<T>, java.lang.Class<V>, java.lang.String);
     method public void set(T, V);
   }
 
-  public final class Range {
+  public final class Range<T extends java.lang.Comparable<? super T>> {
     ctor public Range(T, T);
     method public T clamp(T);
     method public boolean contains(T);
     method public boolean contains(android.util.Range<T>);
-    method public static android.util.Range<T> create(T, T);
+    method public static <T extends java.lang.Comparable<? super T>> android.util.Range<T> create(T, T);
     method public android.util.Range<T> extend(android.util.Range<T>);
     method public android.util.Range<T> extend(T, T);
     method public android.util.Range<T> extend(T);
@@ -43458,7 +43460,7 @@
     method public static android.util.SizeF parseSizeF(java.lang.String) throws java.lang.NumberFormatException;
   }
 
-  public class SparseArray implements java.lang.Cloneable {
+  public class SparseArray<E> implements java.lang.Cloneable {
     ctor public SparseArray();
     ctor public SparseArray(int);
     method public void append(int, E);
@@ -43818,8 +43820,11 @@
     field public static final android.os.Parcelable.Creator<android.view.Display.Mode> CREATOR;
   }
 
-  public final class DragAndDropPermissions {
+  public final class DragAndDropPermissions implements android.os.Parcelable {
+    method public int describeContents();
     method public void release();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.view.DragAndDropPermissions> CREATOR;
   }
 
   public class DragEvent implements android.os.Parcelable {
@@ -48235,7 +48240,7 @@
     method public static java.lang.String stripAnchor(java.lang.String);
   }
 
-  public abstract interface ValueCallback {
+  public abstract interface ValueCallback<T> {
     method public abstract void onReceiveValue(T);
   }
 
@@ -49250,7 +49255,7 @@
     field public static final int NO_SELECTION = -2147483648; // 0x80000000
   }
 
-  public abstract class AdapterView extends android.view.ViewGroup {
+  public abstract class AdapterView<T extends android.widget.Adapter> extends android.view.ViewGroup {
     ctor public AdapterView(android.content.Context);
     ctor public AdapterView(android.content.Context, android.util.AttributeSet);
     ctor public AdapterView(android.content.Context, android.util.AttributeSet, int);
@@ -49373,7 +49378,7 @@
     ctor public AnalogClock(android.content.Context, android.util.AttributeSet, int, int);
   }
 
-  public class ArrayAdapter extends android.widget.BaseAdapter implements android.widget.Filterable android.widget.ThemedSpinnerAdapter {
+  public class ArrayAdapter<T> extends android.widget.BaseAdapter implements android.widget.Filterable android.widget.ThemedSpinnerAdapter {
     ctor public ArrayAdapter(android.content.Context, int);
     ctor public ArrayAdapter(android.content.Context, int, int);
     ctor public ArrayAdapter(android.content.Context, int, T[]);
@@ -49434,7 +49439,7 @@
     method protected void performFiltering(java.lang.CharSequence, int);
     method public void performValidation();
     method protected void replaceText(java.lang.CharSequence);
-    method public void setAdapter(T);
+    method public <T extends android.widget.ListAdapter & android.widget.Filterable> void setAdapter(T);
     method public void setCompletionHint(java.lang.CharSequence);
     method public void setDropDownAnchor(int);
     method public void setDropDownBackgroundDrawable(android.graphics.drawable.Drawable);
@@ -51719,7 +51724,7 @@
 
 package com.android.internal.util {
 
-  public abstract interface Predicate {
+  public abstract interface Predicate<T> {
     method public abstract boolean apply(T);
   }
 
@@ -53766,13 +53771,13 @@
     enum_constant public static final java.lang.Character.UnicodeScript YI;
   }
 
-  public final class Class implements java.lang.reflect.AnnotatedElement java.lang.reflect.GenericDeclaration java.io.Serializable java.lang.reflect.Type {
-    method public java.lang.Class<? extends U> asSubclass(java.lang.Class<U>);
+  public final class Class<T> implements java.lang.reflect.AnnotatedElement java.lang.reflect.GenericDeclaration java.io.Serializable java.lang.reflect.Type {
+    method public <U> java.lang.Class<? extends U> asSubclass(java.lang.Class<U>);
     method public T cast(java.lang.Object);
     method public boolean desiredAssertionStatus();
     method public static java.lang.Class<?> forName(java.lang.String) throws java.lang.ClassNotFoundException;
     method public static java.lang.Class<?> forName(java.lang.String, boolean, java.lang.ClassLoader) throws java.lang.ClassNotFoundException;
-    method public A getAnnotation(java.lang.Class<A>);
+    method public <A extends java.lang.annotation.Annotation> A getAnnotation(java.lang.Class<A>);
     method public java.lang.annotation.Annotation[] getAnnotations();
     method public java.lang.String getCanonicalName();
     method public java.lang.ClassLoader getClassLoader();
@@ -53889,7 +53894,7 @@
   public abstract interface Cloneable {
   }
 
-  public abstract interface Comparable {
+  public abstract interface Comparable<T> {
     method public abstract int compareTo(T);
   }
 
@@ -53943,7 +53948,7 @@
     field public static final java.lang.Class<java.lang.Double> TYPE;
   }
 
-  public abstract class Enum implements java.lang.Comparable java.io.Serializable {
+  public abstract class Enum<E extends java.lang.Enum<E>> implements java.lang.Comparable java.io.Serializable {
     ctor protected Enum(java.lang.String, int);
     method protected final java.lang.Object clone() throws java.lang.CloneNotSupportedException;
     method public final int compareTo(E);
@@ -53953,7 +53958,7 @@
     method public final int hashCode();
     method public final java.lang.String name();
     method public final int ordinal();
-    method public static T valueOf(java.lang.Class<T>, java.lang.String);
+    method public static <T extends java.lang.Enum<T>> T valueOf(java.lang.Class<T>, java.lang.String);
   }
 
   public class EnumConstantNotPresentException extends java.lang.RuntimeException {
@@ -54072,7 +54077,7 @@
     ctor public IndexOutOfBoundsException(java.lang.String);
   }
 
-  public class InheritableThreadLocal extends java.lang.ThreadLocal {
+  public class InheritableThreadLocal<T> extends java.lang.ThreadLocal {
     ctor public InheritableThreadLocal();
     method protected T childValue(T);
   }
@@ -54143,7 +54148,7 @@
     ctor public InterruptedException(java.lang.String);
   }
 
-  public abstract interface Iterable {
+  public abstract interface Iterable<T> {
     method public default void forEach(java.util.function.Consumer<? super T>);
     method public abstract java.util.Iterator<T> iterator();
     method public default java.util.Spliterator<T> spliterator();
@@ -54351,12 +54356,12 @@
   }
 
   public class Package implements java.lang.reflect.AnnotatedElement {
-    method public A getAnnotation(java.lang.Class<A>);
+    method public <A extends java.lang.annotation.Annotation> A getAnnotation(java.lang.Class<A>);
     method public java.lang.annotation.Annotation[] getAnnotations();
-    method public A[] getAnnotationsByType(java.lang.Class<A>);
-    method public A getDeclaredAnnotation(java.lang.Class<A>);
+    method public <A extends java.lang.annotation.Annotation> A[] getAnnotationsByType(java.lang.Class<A>);
+    method public <A extends java.lang.annotation.Annotation> A getDeclaredAnnotation(java.lang.Class<A>);
     method public java.lang.annotation.Annotation[] getDeclaredAnnotations();
-    method public A[] getDeclaredAnnotationsByType(java.lang.Class<A>);
+    method public <A extends java.lang.annotation.Annotation> A[] getDeclaredAnnotationsByType(java.lang.Class<A>);
     method public java.lang.String getImplementationTitle();
     method public java.lang.String getImplementationVendor();
     method public java.lang.String getImplementationVersion();
@@ -54916,7 +54921,7 @@
     method public void uncaughtException(java.lang.Thread, java.lang.Throwable);
   }
 
-  public class ThreadLocal {
+  public class ThreadLocal<T> {
     ctor public ThreadLocal();
     method public T get();
     method protected T initialValue();
@@ -55056,30 +55061,30 @@
 
 package java.lang.ref {
 
-  public class PhantomReference extends java.lang.ref.Reference {
+  public class PhantomReference<T> extends java.lang.ref.Reference {
     ctor public PhantomReference(T, java.lang.ref.ReferenceQueue<? super T>);
   }
 
-  public abstract class Reference {
+  public abstract class Reference<T> {
     method public void clear();
     method public boolean enqueue();
     method public T get();
     method public boolean isEnqueued();
   }
 
-  public class ReferenceQueue {
+  public class ReferenceQueue<T> {
     ctor public ReferenceQueue();
     method public java.lang.ref.Reference<? extends T> poll();
     method public java.lang.ref.Reference<? extends T> remove(long) throws java.lang.IllegalArgumentException, java.lang.InterruptedException;
     method public java.lang.ref.Reference<? extends T> remove() throws java.lang.InterruptedException;
   }
 
-  public class SoftReference extends java.lang.ref.Reference {
+  public class SoftReference<T> extends java.lang.ref.Reference {
     ctor public SoftReference(T);
     ctor public SoftReference(T, java.lang.ref.ReferenceQueue<? super T>);
   }
 
-  public class WeakReference extends java.lang.ref.Reference {
+  public class WeakReference<T> extends java.lang.ref.Reference {
     ctor public WeakReference(T);
     ctor public WeakReference(T, java.lang.ref.ReferenceQueue<? super T>);
   }
@@ -55090,7 +55095,7 @@
 
   public class AccessibleObject implements java.lang.reflect.AnnotatedElement {
     ctor protected AccessibleObject();
-    method public T getAnnotation(java.lang.Class<T>);
+    method public <T extends java.lang.annotation.Annotation> T getAnnotation(java.lang.Class<T>);
     method public java.lang.annotation.Annotation[] getAnnotations();
     method public java.lang.annotation.Annotation[] getDeclaredAnnotations();
     method public boolean isAccessible();
@@ -55099,12 +55104,12 @@
   }
 
   public abstract interface AnnotatedElement {
-    method public abstract T getAnnotation(java.lang.Class<T>);
+    method public abstract <T extends java.lang.annotation.Annotation> T getAnnotation(java.lang.Class<T>);
     method public abstract java.lang.annotation.Annotation[] getAnnotations();
-    method public default T[] getAnnotationsByType(java.lang.Class<T>);
-    method public default java.lang.annotation.Annotation getDeclaredAnnotation(java.lang.Class<T>);
+    method public default <T extends java.lang.annotation.Annotation> T[] getAnnotationsByType(java.lang.Class<T>);
+    method public default <T extends java.lang.annotation.Annotation> java.lang.annotation.Annotation getDeclaredAnnotation(java.lang.Class<T>);
     method public abstract java.lang.annotation.Annotation[] getDeclaredAnnotations();
-    method public default T[] getDeclaredAnnotationsByType(java.lang.Class<T>);
+    method public default <T extends java.lang.annotation.Annotation> T[] getDeclaredAnnotationsByType(java.lang.Class<T>);
     method public default boolean isAnnotationPresent(java.lang.Class<? extends java.lang.annotation.Annotation>);
   }
 
@@ -55132,8 +55137,8 @@
     method public static void setShort(java.lang.Object, int, short) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException;
   }
 
-  public final class Constructor extends java.lang.reflect.AccessibleObject implements java.lang.reflect.GenericDeclaration java.lang.reflect.Member {
-    method public A getAnnotation(java.lang.Class<A>);
+  public final class Constructor<T> extends java.lang.reflect.AccessibleObject implements java.lang.reflect.GenericDeclaration java.lang.reflect.Member {
+    method public <A extends java.lang.annotation.Annotation> A getAnnotation(java.lang.Class<A>);
     method public java.lang.Class<T> getDeclaringClass();
     method public java.lang.Class<?>[] getExceptionTypes();
     method public java.lang.reflect.Type[] getGenericExceptionTypes();
@@ -55152,7 +55157,7 @@
 
   public final class Field extends java.lang.reflect.AccessibleObject implements java.lang.reflect.Member {
     method public java.lang.Object get(java.lang.Object) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException;
-    method public A getAnnotation(java.lang.Class<A>);
+    method public <A extends java.lang.annotation.Annotation> A getAnnotation(java.lang.Class<A>);
     method public boolean getBoolean(java.lang.Object) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException;
     method public byte getByte(java.lang.Object) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException;
     method public char getChar(java.lang.Object) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException;
@@ -55218,7 +55223,7 @@
   }
 
   public final class Method extends java.lang.reflect.AccessibleObject implements java.lang.reflect.GenericDeclaration java.lang.reflect.Member {
-    method public A getAnnotation(java.lang.Class<A>);
+    method public <A extends java.lang.annotation.Annotation> A getAnnotation(java.lang.Class<A>);
     method public java.lang.Class<?> getDeclaringClass();
     method public java.lang.Object getDefaultValue();
     method public java.lang.Class<?>[] getExceptionTypes();
@@ -55296,7 +55301,7 @@
   public abstract interface Type {
   }
 
-  public abstract interface TypeVariable implements java.lang.reflect.Type {
+  public abstract interface TypeVariable<D extends java.lang.reflect.GenericDeclaration> implements java.lang.reflect.Type {
     method public abstract java.lang.reflect.Type[] getBounds();
     method public abstract D getGenericDeclaration();
     method public abstract java.lang.String getName();
@@ -56085,7 +56090,7 @@
     method public abstract java.net.SocketImpl createSocketImpl();
   }
 
-  public abstract interface SocketOption {
+  public abstract interface SocketOption<T> {
     method public abstract java.lang.String name();
     method public abstract java.lang.Class<T> type();
   }
@@ -56669,7 +56674,7 @@
     method public final long read(java.nio.ByteBuffer[]) throws java.io.IOException;
     method public abstract java.net.SocketAddress receive(java.nio.ByteBuffer) throws java.io.IOException;
     method public abstract int send(java.nio.ByteBuffer, java.net.SocketAddress) throws java.io.IOException;
-    method public abstract java.nio.channels.DatagramChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
+    method public abstract <T> java.nio.channels.DatagramChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
     method public abstract java.net.DatagramSocket socket();
     method public final int validOps();
     method public abstract int write(java.nio.ByteBuffer) throws java.io.IOException;
@@ -56745,8 +56750,8 @@
   public abstract interface NetworkChannel implements java.nio.channels.Channel {
     method public abstract java.nio.channels.NetworkChannel bind(java.net.SocketAddress) throws java.io.IOException;
     method public abstract java.net.SocketAddress getLocalAddress() throws java.io.IOException;
-    method public abstract T getOption(java.net.SocketOption<T>) throws java.io.IOException;
-    method public abstract java.nio.channels.NetworkChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
+    method public abstract <T> T getOption(java.net.SocketOption<T>) throws java.io.IOException;
+    method public abstract <T> java.nio.channels.NetworkChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
     method public abstract java.util.Set<java.net.SocketOption<?>> supportedOptions();
   }
 
@@ -56863,7 +56868,7 @@
     method public final java.nio.channels.ServerSocketChannel bind(java.net.SocketAddress) throws java.io.IOException;
     method public abstract java.nio.channels.ServerSocketChannel bind(java.net.SocketAddress, int) throws java.io.IOException;
     method public static java.nio.channels.ServerSocketChannel open() throws java.io.IOException;
-    method public abstract java.nio.channels.ServerSocketChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
+    method public abstract <T> java.nio.channels.ServerSocketChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
     method public abstract java.net.ServerSocket socket();
     method public final int validOps();
   }
@@ -56881,7 +56886,7 @@
     method public abstract int read(java.nio.ByteBuffer) throws java.io.IOException;
     method public abstract long read(java.nio.ByteBuffer[], int, int) throws java.io.IOException;
     method public final long read(java.nio.ByteBuffer[]) throws java.io.IOException;
-    method public abstract java.nio.channels.SocketChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
+    method public abstract <T> java.nio.channels.SocketChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
     method public abstract java.nio.channels.SocketChannel shutdownInput() throws java.io.IOException;
     method public abstract java.nio.channels.SocketChannel shutdownOutput() throws java.io.IOException;
     method public abstract java.net.Socket socket();
@@ -57128,12 +57133,12 @@
 
   public final class AccessController {
     method public static void checkPermission(java.security.Permission) throws java.security.AccessControlException;
-    method public static T doPrivileged(java.security.PrivilegedAction<T>);
-    method public static T doPrivileged(java.security.PrivilegedAction<T>, java.security.AccessControlContext);
-    method public static T doPrivileged(java.security.PrivilegedExceptionAction<T>) throws java.security.PrivilegedActionException;
-    method public static T doPrivileged(java.security.PrivilegedExceptionAction<T>, java.security.AccessControlContext) throws java.security.PrivilegedActionException;
-    method public static T doPrivilegedWithCombiner(java.security.PrivilegedAction<T>);
-    method public static T doPrivilegedWithCombiner(java.security.PrivilegedExceptionAction<T>) throws java.security.PrivilegedActionException;
+    method public static <T> T doPrivileged(java.security.PrivilegedAction<T>);
+    method public static <T> T doPrivileged(java.security.PrivilegedAction<T>, java.security.AccessControlContext);
+    method public static <T> T doPrivileged(java.security.PrivilegedExceptionAction<T>) throws java.security.PrivilegedActionException;
+    method public static <T> T doPrivileged(java.security.PrivilegedExceptionAction<T>, java.security.AccessControlContext) throws java.security.PrivilegedActionException;
+    method public static <T> T doPrivilegedWithCombiner(java.security.PrivilegedAction<T>);
+    method public static <T> T doPrivilegedWithCombiner(java.security.PrivilegedExceptionAction<T>) throws java.security.PrivilegedActionException;
     method public static java.security.AccessControlContext getContext();
   }
 
@@ -57172,7 +57177,7 @@
     method public static java.security.AlgorithmParameters getInstance(java.lang.String) throws java.security.NoSuchAlgorithmException;
     method public static java.security.AlgorithmParameters getInstance(java.lang.String, java.lang.String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException;
     method public static java.security.AlgorithmParameters getInstance(java.lang.String, java.security.Provider) throws java.security.NoSuchAlgorithmException;
-    method public final T getParameterSpec(java.lang.Class<T>) throws java.security.spec.InvalidParameterSpecException;
+    method public final <T extends java.security.spec.AlgorithmParameterSpec> T getParameterSpec(java.lang.Class<T>) throws java.security.spec.InvalidParameterSpecException;
     method public final java.security.Provider getProvider();
     method public final void init(java.security.spec.AlgorithmParameterSpec) throws java.security.spec.InvalidParameterSpecException;
     method public final void init(byte[]) throws java.io.IOException;
@@ -57184,7 +57189,7 @@
     ctor public AlgorithmParametersSpi();
     method protected abstract byte[] engineGetEncoded() throws java.io.IOException;
     method protected abstract byte[] engineGetEncoded(java.lang.String) throws java.io.IOException;
-    method protected abstract T engineGetParameterSpec(java.lang.Class<T>) throws java.security.spec.InvalidParameterSpecException;
+    method protected abstract <T extends java.security.spec.AlgorithmParameterSpec> T engineGetParameterSpec(java.lang.Class<T>) throws java.security.spec.InvalidParameterSpecException;
     method protected abstract void engineInit(java.security.spec.AlgorithmParameterSpec) throws java.security.spec.InvalidParameterSpecException;
     method protected abstract void engineInit(byte[]) throws java.io.IOException;
     method protected abstract void engineInit(byte[], java.lang.String) throws java.io.IOException;
@@ -57369,7 +57374,7 @@
     method public static java.security.KeyFactory getInstance(java.lang.String) throws java.security.NoSuchAlgorithmException;
     method public static java.security.KeyFactory getInstance(java.lang.String, java.lang.String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException;
     method public static java.security.KeyFactory getInstance(java.lang.String, java.security.Provider) throws java.security.NoSuchAlgorithmException;
-    method public final T getKeySpec(java.security.Key, java.lang.Class<T>) throws java.security.spec.InvalidKeySpecException;
+    method public final <T extends java.security.spec.KeySpec> T getKeySpec(java.security.Key, java.lang.Class<T>) throws java.security.spec.InvalidKeySpecException;
     method public final java.security.Provider getProvider();
     method public final java.security.Key translateKey(java.security.Key) throws java.security.InvalidKeyException;
   }
@@ -57378,7 +57383,7 @@
     ctor public KeyFactorySpi();
     method protected abstract java.security.PrivateKey engineGeneratePrivate(java.security.spec.KeySpec) throws java.security.spec.InvalidKeySpecException;
     method protected abstract java.security.PublicKey engineGeneratePublic(java.security.spec.KeySpec) throws java.security.spec.InvalidKeySpecException;
-    method protected abstract T engineGetKeySpec(java.security.Key, java.lang.Class<T>) throws java.security.spec.InvalidKeySpecException;
+    method protected abstract <T extends java.security.spec.KeySpec> T engineGetKeySpec(java.security.Key, java.lang.Class<T>) throws java.security.spec.InvalidKeySpecException;
     method protected abstract java.security.Key engineTranslateKey(java.security.Key) throws java.security.InvalidKeyException;
   }
 
@@ -57647,7 +57652,7 @@
     field public static final long serialVersionUID = 6034044314589513430L; // 0x53bd3b559a12c6d6L
   }
 
-  public abstract interface PrivilegedAction {
+  public abstract interface PrivilegedAction<T> {
     method public abstract T run();
   }
 
@@ -57656,7 +57661,7 @@
     method public java.lang.Exception getException();
   }
 
-  public abstract interface PrivilegedExceptionAction {
+  public abstract interface PrivilegedExceptionAction<T> {
     method public abstract T run() throws java.lang.Exception;
   }
 
@@ -59838,11 +59843,11 @@
     method public abstract void free() throws java.sql.SQLException;
     method public abstract java.io.InputStream getBinaryStream() throws java.sql.SQLException;
     method public abstract java.io.Reader getCharacterStream() throws java.sql.SQLException;
-    method public abstract T getSource(java.lang.Class<T>) throws java.sql.SQLException;
+    method public abstract <T extends javax.xml.transform.Source> T getSource(java.lang.Class<T>) throws java.sql.SQLException;
     method public abstract java.lang.String getString() throws java.sql.SQLException;
     method public abstract java.io.OutputStream setBinaryStream() throws java.sql.SQLException;
     method public abstract java.io.Writer setCharacterStream() throws java.sql.SQLException;
-    method public abstract T setResult(java.lang.Class<T>) throws java.sql.SQLException;
+    method public abstract <T extends javax.xml.transform.Result> T setResult(java.lang.Class<T>) throws java.sql.SQLException;
     method public abstract void setString(java.lang.String) throws java.sql.SQLException;
   }
 
@@ -59966,7 +59971,7 @@
 
   public abstract interface Wrapper {
     method public abstract boolean isWrapperFor(java.lang.Class<?>) throws java.sql.SQLException;
-    method public abstract T unwrap(java.lang.Class<T>) throws java.sql.SQLException;
+    method public abstract <T> T unwrap(java.lang.Class<T>) throws java.sql.SQLException;
   }
 
 }
@@ -60499,7 +60504,7 @@
 
 package java.util {
 
-  public abstract class AbstractCollection implements java.util.Collection {
+  public abstract class AbstractCollection<E> implements java.util.Collection {
     ctor protected AbstractCollection();
     method public boolean add(E);
     method public boolean addAll(java.util.Collection<? extends E>);
@@ -60513,10 +60518,10 @@
     method public boolean retainAll(java.util.Collection<?>);
     method public abstract int size();
     method public java.lang.Object[] toArray();
-    method public T[] toArray(T[]);
+    method public <T> T[] toArray(T[]);
   }
 
-  public abstract class AbstractList extends java.util.AbstractCollection implements java.util.List {
+  public abstract class AbstractList<E> extends java.util.AbstractCollection implements java.util.List {
     ctor protected AbstractList();
     method public void add(int, E);
     method public boolean addAll(int, java.util.Collection<? extends E>);
@@ -60533,7 +60538,7 @@
     field protected transient int modCount;
   }
 
-  public abstract class AbstractMap implements java.util.Map {
+  public abstract class AbstractMap<K, V> implements java.util.Map {
     ctor protected AbstractMap();
     method public void clear();
     method public boolean containsKey(java.lang.Object);
@@ -60549,7 +60554,7 @@
     method public java.util.Collection<V> values();
   }
 
-  public static class AbstractMap.SimpleEntry implements java.util.Map.Entry java.io.Serializable {
+  public static class AbstractMap.SimpleEntry<K, V> implements java.util.Map.Entry java.io.Serializable {
     ctor public AbstractMap.SimpleEntry(K, V);
     ctor public AbstractMap.SimpleEntry(java.util.Map.Entry<? extends K, ? extends V>);
     method public K getKey();
@@ -60557,7 +60562,7 @@
     method public V setValue(V);
   }
 
-  public static class AbstractMap.SimpleImmutableEntry implements java.util.Map.Entry java.io.Serializable {
+  public static class AbstractMap.SimpleImmutableEntry<K, V> implements java.util.Map.Entry java.io.Serializable {
     ctor public AbstractMap.SimpleImmutableEntry(K, V);
     ctor public AbstractMap.SimpleImmutableEntry(java.util.Map.Entry<? extends K, ? extends V>);
     method public K getKey();
@@ -60565,23 +60570,23 @@
     method public V setValue(V);
   }
 
-  public abstract class AbstractQueue extends java.util.AbstractCollection implements java.util.Queue {
+  public abstract class AbstractQueue<E> extends java.util.AbstractCollection implements java.util.Queue {
     ctor protected AbstractQueue();
     method public E element();
     method public E remove();
   }
 
-  public abstract class AbstractSequentialList extends java.util.AbstractList {
+  public abstract class AbstractSequentialList<E> extends java.util.AbstractList {
     ctor protected AbstractSequentialList();
     method public E get(int);
     method public abstract java.util.ListIterator<E> listIterator(int);
   }
 
-  public abstract class AbstractSet extends java.util.AbstractCollection implements java.util.Set {
+  public abstract class AbstractSet<E> extends java.util.AbstractCollection implements java.util.Set {
     ctor protected AbstractSet();
   }
 
-  public class ArrayDeque extends java.util.AbstractCollection implements java.lang.Cloneable java.util.Deque java.io.Serializable {
+  public class ArrayDeque<E> extends java.util.AbstractCollection implements java.lang.Cloneable java.util.Deque java.io.Serializable {
     ctor public ArrayDeque();
     ctor public ArrayDeque(int);
     ctor public ArrayDeque(java.util.Collection<? extends E>);
@@ -60613,7 +60618,7 @@
     method public java.util.Spliterator<E> spliterator();
   }
 
-  public class ArrayList extends java.util.AbstractList implements java.lang.Cloneable java.util.List java.util.RandomAccess java.io.Serializable {
+  public class ArrayList<E> extends java.util.AbstractList implements java.lang.Cloneable java.util.List java.util.RandomAccess java.io.Serializable {
     ctor public ArrayList(int);
     ctor public ArrayList();
     ctor public ArrayList(java.util.Collection<? extends E>);
@@ -60630,7 +60635,7 @@
   }
 
   public class Arrays {
-    method public static java.util.List<T> asList(T...);
+    method public static <T> java.util.List<T> asList(T...);
     method public static int binarySearch(long[], long);
     method public static int binarySearch(long[], int, int, long);
     method public static int binarySearch(int[], int);
@@ -60647,10 +60652,10 @@
     method public static int binarySearch(float[], int, int, float);
     method public static int binarySearch(java.lang.Object[], java.lang.Object);
     method public static int binarySearch(java.lang.Object[], int, int, java.lang.Object);
-    method public static int binarySearch(T[], T, java.util.Comparator<? super T>);
-    method public static int binarySearch(T[], int, int, T, java.util.Comparator<? super T>);
-    method public static T[] copyOf(T[], int);
-    method public static T[] copyOf(U[], int, java.lang.Class<? extends T[]>);
+    method public static <T> int binarySearch(T[], T, java.util.Comparator<? super T>);
+    method public static <T> int binarySearch(T[], int, int, T, java.util.Comparator<? super T>);
+    method public static <T> T[] copyOf(T[], int);
+    method public static <T, U> T[] copyOf(U[], int, java.lang.Class<? extends T[]>);
     method public static byte[] copyOf(byte[], int);
     method public static short[] copyOf(short[], int);
     method public static int[] copyOf(int[], int);
@@ -60659,8 +60664,8 @@
     method public static float[] copyOf(float[], int);
     method public static double[] copyOf(double[], int);
     method public static boolean[] copyOf(boolean[], int);
-    method public static T[] copyOfRange(T[], int, int);
-    method public static T[] copyOfRange(U[], int, int, java.lang.Class<? extends T[]>);
+    method public static <T> T[] copyOfRange(T[], int, int);
+    method public static <T, U> T[] copyOfRange(U[], int, int, java.lang.Class<? extends T[]>);
     method public static byte[] copyOfRange(byte[], int, int);
     method public static short[] copyOfRange(short[], int, int);
     method public static int[] copyOfRange(int[], int, int);
@@ -60708,15 +60713,15 @@
     method public static int hashCode(float[]);
     method public static int hashCode(double[]);
     method public static int hashCode(java.lang.Object[]);
-    method public static void parallelPrefix(T[], java.util.function.BinaryOperator<T>);
-    method public static void parallelPrefix(T[], int, int, java.util.function.BinaryOperator<T>);
+    method public static <T> void parallelPrefix(T[], java.util.function.BinaryOperator<T>);
+    method public static <T> void parallelPrefix(T[], int, int, java.util.function.BinaryOperator<T>);
     method public static void parallelPrefix(long[], java.util.function.LongBinaryOperator);
     method public static void parallelPrefix(long[], int, int, java.util.function.LongBinaryOperator);
     method public static void parallelPrefix(double[], java.util.function.DoubleBinaryOperator);
     method public static void parallelPrefix(double[], int, int, java.util.function.DoubleBinaryOperator);
     method public static void parallelPrefix(int[], java.util.function.IntBinaryOperator);
     method public static void parallelPrefix(int[], int, int, java.util.function.IntBinaryOperator);
-    method public static void parallelSetAll(T[], java.util.function.IntFunction<? extends T>);
+    method public static <T> void parallelSetAll(T[], java.util.function.IntFunction<? extends T>);
     method public static void parallelSetAll(int[], java.util.function.IntUnaryOperator);
     method public static void parallelSetAll(long[], java.util.function.IntToLongFunction);
     method public static void parallelSetAll(double[], java.util.function.IntToDoubleFunction);
@@ -60734,11 +60739,11 @@
     method public static void parallelSort(float[], int, int);
     method public static void parallelSort(double[]);
     method public static void parallelSort(double[], int, int);
-    method public static void parallelSort(T[]);
-    method public static void parallelSort(T[], int, int);
-    method public static void parallelSort(T[], java.util.Comparator<? super T>);
-    method public static void parallelSort(T[], int, int, java.util.Comparator<? super T>);
-    method public static void setAll(T[], java.util.function.IntFunction<? extends T>);
+    method public static <T extends java.lang.Comparable<? super T>> void parallelSort(T[]);
+    method public static <T extends java.lang.Comparable<? super T>> void parallelSort(T[], int, int);
+    method public static <T> void parallelSort(T[], java.util.Comparator<? super T>);
+    method public static <T> void parallelSort(T[], int, int, java.util.Comparator<? super T>);
+    method public static <T> void setAll(T[], java.util.function.IntFunction<? extends T>);
     method public static void setAll(int[], java.util.function.IntUnaryOperator);
     method public static void setAll(long[], java.util.function.IntToLongFunction);
     method public static void setAll(double[], java.util.function.IntToDoubleFunction);
@@ -60758,18 +60763,18 @@
     method public static void sort(double[], int, int);
     method public static void sort(java.lang.Object[]);
     method public static void sort(java.lang.Object[], int, int);
-    method public static void sort(T[], java.util.Comparator<? super T>);
-    method public static void sort(T[], int, int, java.util.Comparator<? super T>);
-    method public static java.util.Spliterator<T> spliterator(T[]);
-    method public static java.util.Spliterator<T> spliterator(T[], int, int);
+    method public static <T> void sort(T[], java.util.Comparator<? super T>);
+    method public static <T> void sort(T[], int, int, java.util.Comparator<? super T>);
+    method public static <T> java.util.Spliterator<T> spliterator(T[]);
+    method public static <T> java.util.Spliterator<T> spliterator(T[], int, int);
     method public static java.util.Spliterator.OfInt spliterator(int[]);
     method public static java.util.Spliterator.OfInt spliterator(int[], int, int);
     method public static java.util.Spliterator.OfLong spliterator(long[]);
     method public static java.util.Spliterator.OfLong spliterator(long[], int, int);
     method public static java.util.Spliterator.OfDouble spliterator(double[]);
     method public static java.util.Spliterator.OfDouble spliterator(double[], int, int);
-    method public static java.util.stream.Stream<T> stream(T[]);
-    method public static java.util.stream.Stream<T> stream(T[], int, int);
+    method public static <T> java.util.stream.Stream<T> stream(T[]);
+    method public static <T> java.util.stream.Stream<T> stream(T[], int, int);
     method public static java.util.stream.IntStream stream(int[]);
     method public static java.util.stream.IntStream stream(int[], int, int);
     method public static java.util.stream.LongStream stream(long[]);
@@ -60926,7 +60931,7 @@
     field protected long time;
   }
 
-  public abstract interface Collection implements java.lang.Iterable {
+  public abstract interface Collection<E> implements java.lang.Iterable {
     method public abstract boolean add(E);
     method public abstract boolean addAll(java.util.Collection<? extends E>);
     method public abstract void clear();
@@ -60944,86 +60949,86 @@
     method public abstract int size();
     method public default java.util.stream.Stream<E> stream();
     method public abstract java.lang.Object[] toArray();
-    method public abstract T[] toArray(T[]);
+    method public abstract <T> T[] toArray(T[]);
   }
 
   public class Collections {
-    method public static boolean addAll(java.util.Collection<? super T>, T...);
-    method public static java.util.Queue<T> asLifoQueue(java.util.Deque<T>);
-    method public static int binarySearch(java.util.List<? extends java.lang.Comparable<? super T>>, T);
-    method public static int binarySearch(java.util.List<? extends T>, T, java.util.Comparator<? super T>);
-    method public static java.util.Collection<E> checkedCollection(java.util.Collection<E>, java.lang.Class<E>);
-    method public static java.util.List<E> checkedList(java.util.List<E>, java.lang.Class<E>);
-    method public static java.util.Map<K, V> checkedMap(java.util.Map<K, V>, java.lang.Class<K>, java.lang.Class<V>);
-    method public static java.util.Set<E> checkedSet(java.util.Set<E>, java.lang.Class<E>);
-    method public static java.util.SortedMap<K, V> checkedSortedMap(java.util.SortedMap<K, V>, java.lang.Class<K>, java.lang.Class<V>);
-    method public static java.util.SortedSet<E> checkedSortedSet(java.util.SortedSet<E>, java.lang.Class<E>);
-    method public static void copy(java.util.List<? super T>, java.util.List<? extends T>);
+    method public static <T> boolean addAll(java.util.Collection<? super T>, T...);
+    method public static <T> java.util.Queue<T> asLifoQueue(java.util.Deque<T>);
+    method public static <T> int binarySearch(java.util.List<? extends java.lang.Comparable<? super T>>, T);
+    method public static <T> int binarySearch(java.util.List<? extends T>, T, java.util.Comparator<? super T>);
+    method public static <E> java.util.Collection<E> checkedCollection(java.util.Collection<E>, java.lang.Class<E>);
+    method public static <E> java.util.List<E> checkedList(java.util.List<E>, java.lang.Class<E>);
+    method public static <K, V> java.util.Map<K, V> checkedMap(java.util.Map<K, V>, java.lang.Class<K>, java.lang.Class<V>);
+    method public static <E> java.util.Set<E> checkedSet(java.util.Set<E>, java.lang.Class<E>);
+    method public static <K, V> java.util.SortedMap<K, V> checkedSortedMap(java.util.SortedMap<K, V>, java.lang.Class<K>, java.lang.Class<V>);
+    method public static <E> java.util.SortedSet<E> checkedSortedSet(java.util.SortedSet<E>, java.lang.Class<E>);
+    method public static <T> void copy(java.util.List<? super T>, java.util.List<? extends T>);
     method public static boolean disjoint(java.util.Collection<?>, java.util.Collection<?>);
-    method public static java.util.Enumeration<T> emptyEnumeration();
-    method public static java.util.Iterator<T> emptyIterator();
-    method public static final java.util.List<T> emptyList();
-    method public static java.util.ListIterator<T> emptyListIterator();
-    method public static final java.util.Map<K, V> emptyMap();
-    method public static final java.util.Set<T> emptySet();
-    method public static java.util.Enumeration<T> enumeration(java.util.Collection<T>);
-    method public static void fill(java.util.List<? super T>, T);
+    method public static <T> java.util.Enumeration<T> emptyEnumeration();
+    method public static <T> java.util.Iterator<T> emptyIterator();
+    method public static final <T> java.util.List<T> emptyList();
+    method public static <T> java.util.ListIterator<T> emptyListIterator();
+    method public static final <K, V> java.util.Map<K, V> emptyMap();
+    method public static final <T> java.util.Set<T> emptySet();
+    method public static <T> java.util.Enumeration<T> enumeration(java.util.Collection<T>);
+    method public static <T> void fill(java.util.List<? super T>, T);
     method public static int frequency(java.util.Collection<?>, java.lang.Object);
     method public static int indexOfSubList(java.util.List<?>, java.util.List<?>);
     method public static int lastIndexOfSubList(java.util.List<?>, java.util.List<?>);
-    method public static java.util.ArrayList<T> list(java.util.Enumeration<T>);
-    method public static T max(java.util.Collection<? extends T>);
-    method public static T max(java.util.Collection<? extends T>, java.util.Comparator<? super T>);
-    method public static T min(java.util.Collection<? extends T>);
-    method public static T min(java.util.Collection<? extends T>, java.util.Comparator<? super T>);
-    method public static java.util.List<T> nCopies(int, T);
-    method public static java.util.Set<E> newSetFromMap(java.util.Map<E, java.lang.Boolean>);
-    method public static boolean replaceAll(java.util.List<T>, T, T);
+    method public static <T> java.util.ArrayList<T> list(java.util.Enumeration<T>);
+    method public static <T extends java.lang.Object & java.lang.Comparable<? super T>> T max(java.util.Collection<? extends T>);
+    method public static <T> T max(java.util.Collection<? extends T>, java.util.Comparator<? super T>);
+    method public static <T extends java.lang.Object & java.lang.Comparable<? super T>> T min(java.util.Collection<? extends T>);
+    method public static <T> T min(java.util.Collection<? extends T>, java.util.Comparator<? super T>);
+    method public static <T> java.util.List<T> nCopies(int, T);
+    method public static <E> java.util.Set<E> newSetFromMap(java.util.Map<E, java.lang.Boolean>);
+    method public static <T> boolean replaceAll(java.util.List<T>, T, T);
     method public static void reverse(java.util.List<?>);
-    method public static java.util.Comparator<T> reverseOrder();
-    method public static java.util.Comparator<T> reverseOrder(java.util.Comparator<T>);
+    method public static <T> java.util.Comparator<T> reverseOrder();
+    method public static <T> java.util.Comparator<T> reverseOrder(java.util.Comparator<T>);
     method public static void rotate(java.util.List<?>, int);
     method public static void shuffle(java.util.List<?>);
     method public static void shuffle(java.util.List<?>, java.util.Random);
-    method public static java.util.Set<E> singleton(E);
-    method public static java.util.List<E> singletonList(E);
-    method public static java.util.Map<K, V> singletonMap(K, V);
-    method public static void sort(java.util.List<T>);
-    method public static void sort(java.util.List<T>, java.util.Comparator<? super T>);
+    method public static <E> java.util.Set<E> singleton(E);
+    method public static <E> java.util.List<E> singletonList(E);
+    method public static <K, V> java.util.Map<K, V> singletonMap(K, V);
+    method public static <T extends java.lang.Comparable<? super T>> void sort(java.util.List<T>);
+    method public static <T> void sort(java.util.List<T>, java.util.Comparator<? super T>);
     method public static void swap(java.util.List<?>, int, int);
-    method public static java.util.Collection<T> synchronizedCollection(java.util.Collection<T>);
-    method public static java.util.List<T> synchronizedList(java.util.List<T>);
-    method public static java.util.Map<K, V> synchronizedMap(java.util.Map<K, V>);
-    method public static java.util.Set<T> synchronizedSet(java.util.Set<T>);
-    method public static java.util.SortedMap<K, V> synchronizedSortedMap(java.util.SortedMap<K, V>);
-    method public static java.util.SortedSet<T> synchronizedSortedSet(java.util.SortedSet<T>);
-    method public static java.util.Collection<T> unmodifiableCollection(java.util.Collection<? extends T>);
-    method public static java.util.List<T> unmodifiableList(java.util.List<? extends T>);
-    method public static java.util.Map<K, V> unmodifiableMap(java.util.Map<? extends K, ? extends V>);
-    method public static java.util.Set<T> unmodifiableSet(java.util.Set<? extends T>);
-    method public static java.util.SortedMap<K, V> unmodifiableSortedMap(java.util.SortedMap<K, ? extends V>);
-    method public static java.util.SortedSet<T> unmodifiableSortedSet(java.util.SortedSet<T>);
+    method public static <T> java.util.Collection<T> synchronizedCollection(java.util.Collection<T>);
+    method public static <T> java.util.List<T> synchronizedList(java.util.List<T>);
+    method public static <K, V> java.util.Map<K, V> synchronizedMap(java.util.Map<K, V>);
+    method public static <T> java.util.Set<T> synchronizedSet(java.util.Set<T>);
+    method public static <K, V> java.util.SortedMap<K, V> synchronizedSortedMap(java.util.SortedMap<K, V>);
+    method public static <T> java.util.SortedSet<T> synchronizedSortedSet(java.util.SortedSet<T>);
+    method public static <T> java.util.Collection<T> unmodifiableCollection(java.util.Collection<? extends T>);
+    method public static <T> java.util.List<T> unmodifiableList(java.util.List<? extends T>);
+    method public static <K, V> java.util.Map<K, V> unmodifiableMap(java.util.Map<? extends K, ? extends V>);
+    method public static <T> java.util.Set<T> unmodifiableSet(java.util.Set<? extends T>);
+    method public static <K, V> java.util.SortedMap<K, V> unmodifiableSortedMap(java.util.SortedMap<K, ? extends V>);
+    method public static <T> java.util.SortedSet<T> unmodifiableSortedSet(java.util.SortedSet<T>);
     field public static final java.util.List EMPTY_LIST;
     field public static final java.util.Map EMPTY_MAP;
     field public static final java.util.Set EMPTY_SET;
   }
 
-  public abstract interface Comparator {
+  public abstract interface Comparator<T> {
     method public abstract int compare(T, T);
-    method public static java.util.Comparator<T> comparing(java.util.function.Function<? super T, ? extends U>, java.util.Comparator<? super U>);
-    method public static java.util.Comparator<T> comparing(java.util.function.Function<? super T, ? extends U>);
-    method public static java.util.Comparator<T> comparingDouble(java.util.function.ToDoubleFunction<? super T>);
-    method public static java.util.Comparator<T> comparingInt(java.util.function.ToIntFunction<? super T>);
-    method public static java.util.Comparator<T> comparingLong(java.util.function.ToLongFunction<? super T>);
+    method public static <T, U> java.util.Comparator<T> comparing(java.util.function.Function<? super T, ? extends U>, java.util.Comparator<? super U>);
+    method public static <T, U extends java.lang.Comparable<? super U>> java.util.Comparator<T> comparing(java.util.function.Function<? super T, ? extends U>);
+    method public static <T> java.util.Comparator<T> comparingDouble(java.util.function.ToDoubleFunction<? super T>);
+    method public static <T> java.util.Comparator<T> comparingInt(java.util.function.ToIntFunction<? super T>);
+    method public static <T> java.util.Comparator<T> comparingLong(java.util.function.ToLongFunction<? super T>);
     method public abstract boolean equals(java.lang.Object);
-    method public static java.util.Comparator<T> naturalOrder();
-    method public static java.util.Comparator<T> nullsFirst(java.util.Comparator<? super T>);
-    method public static java.util.Comparator<T> nullsLast(java.util.Comparator<? super T>);
-    method public static java.util.Comparator<T> reverseOrder();
+    method public static <T extends java.lang.Comparable<? super T>> java.util.Comparator<T> naturalOrder();
+    method public static <T> java.util.Comparator<T> nullsFirst(java.util.Comparator<? super T>);
+    method public static <T> java.util.Comparator<T> nullsLast(java.util.Comparator<? super T>);
+    method public static <T extends java.lang.Comparable<? super T>> java.util.Comparator<T> reverseOrder();
     method public default java.util.Comparator<T> reversed();
     method public default java.util.Comparator<T> thenComparing(java.util.Comparator<? super T>);
-    method public default java.util.Comparator<T> thenComparing(java.util.function.Function<? super T, ? extends U>, java.util.Comparator<? super U>);
-    method public default java.util.Comparator<T> thenComparing(java.util.function.Function<? super T, ? extends U>);
+    method public default <U> java.util.Comparator<T> thenComparing(java.util.function.Function<? super T, ? extends U>, java.util.Comparator<? super U>);
+    method public default <U extends java.lang.Comparable<? super U>> java.util.Comparator<T> thenComparing(java.util.function.Function<? super T, ? extends U>);
     method public default java.util.Comparator<T> thenComparingDouble(java.util.function.ToDoubleFunction<? super T>);
     method public default java.util.Comparator<T> thenComparingInt(java.util.function.ToIntFunction<? super T>);
     method public default java.util.Comparator<T> thenComparingLong(java.util.function.ToLongFunction<? super T>);
@@ -61082,7 +61087,7 @@
     method public deprecated java.lang.String toLocaleString();
   }
 
-  public abstract interface Deque implements java.util.Queue {
+  public abstract interface Deque<E> implements java.util.Queue {
     method public abstract boolean add(E);
     method public abstract void addFirst(E);
     method public abstract void addLast(E);
@@ -61112,7 +61117,7 @@
     method public abstract int size();
   }
 
-  public abstract class Dictionary {
+  public abstract class Dictionary<K, V> {
     ctor public Dictionary();
     method public abstract java.util.Enumeration<V> elements();
     method public abstract V get(java.lang.Object);
@@ -61143,7 +61148,7 @@
     ctor public EmptyStackException();
   }
 
-  public class EnumMap extends java.util.AbstractMap implements java.lang.Cloneable java.io.Serializable {
+  public class EnumMap<K extends java.lang.Enum<K>, V> extends java.util.AbstractMap implements java.lang.Cloneable java.io.Serializable {
     ctor public EnumMap(java.lang.Class<K>);
     ctor public EnumMap(java.util.EnumMap<K, ? extends V>);
     ctor public EnumMap(java.util.Map<K, ? extends V>);
@@ -61151,23 +61156,23 @@
     method public java.util.Set<java.util.Map.Entry<K, V>> entrySet();
   }
 
-  public abstract class EnumSet extends java.util.AbstractSet implements java.lang.Cloneable java.io.Serializable {
-    method public static java.util.EnumSet<E> allOf(java.lang.Class<E>);
+  public abstract class EnumSet<E extends java.lang.Enum<E>> extends java.util.AbstractSet implements java.lang.Cloneable java.io.Serializable {
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> allOf(java.lang.Class<E>);
     method public java.util.EnumSet<E> clone();
-    method public static java.util.EnumSet<E> complementOf(java.util.EnumSet<E>);
-    method public static java.util.EnumSet<E> copyOf(java.util.EnumSet<E>);
-    method public static java.util.EnumSet<E> copyOf(java.util.Collection<E>);
-    method public static java.util.EnumSet<E> noneOf(java.lang.Class<E>);
-    method public static java.util.EnumSet<E> of(E);
-    method public static java.util.EnumSet<E> of(E, E);
-    method public static java.util.EnumSet<E> of(E, E, E);
-    method public static java.util.EnumSet<E> of(E, E, E, E);
-    method public static java.util.EnumSet<E> of(E, E, E, E, E);
-    method public static java.util.EnumSet<E> of(E, E...);
-    method public static java.util.EnumSet<E> range(E, E);
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> complementOf(java.util.EnumSet<E>);
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> copyOf(java.util.EnumSet<E>);
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> copyOf(java.util.Collection<E>);
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> noneOf(java.lang.Class<E>);
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> of(E);
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> of(E, E);
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> of(E, E, E);
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> of(E, E, E, E);
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> of(E, E, E, E, E);
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> of(E, E...);
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> range(E, E);
   }
 
-  public abstract interface Enumeration {
+  public abstract interface Enumeration<E> {
     method public abstract boolean hasMoreElements();
     method public abstract E nextElement();
   }
@@ -61175,7 +61180,7 @@
   public abstract interface EventListener {
   }
 
-  public abstract class EventListenerProxy implements java.util.EventListener {
+  public abstract class EventListenerProxy<T extends java.util.EventListener> implements java.util.EventListener {
     ctor public EventListenerProxy(T);
     method public T getListener();
   }
@@ -61261,7 +61266,7 @@
     field public static final int BC = 0; // 0x0
   }
 
-  public class HashMap extends java.util.AbstractMap implements java.lang.Cloneable java.util.Map java.io.Serializable {
+  public class HashMap<K, V> extends java.util.AbstractMap implements java.lang.Cloneable java.util.Map java.io.Serializable {
     ctor public HashMap(int, float);
     ctor public HashMap(int);
     ctor public HashMap();
@@ -61273,7 +61278,7 @@
     method public void replaceAll(java.util.function.BiFunction<? super K, ? super V, ? extends V>);
   }
 
-  public class HashSet extends java.util.AbstractSet implements java.lang.Cloneable java.io.Serializable java.util.Set {
+  public class HashSet<E> extends java.util.AbstractSet implements java.lang.Cloneable java.io.Serializable java.util.Set {
     ctor public HashSet();
     ctor public HashSet(java.util.Collection<? extends E>);
     ctor public HashSet(int, float);
@@ -61284,7 +61289,7 @@
     method public java.util.Spliterator<E> spliterator();
   }
 
-  public class Hashtable extends java.util.Dictionary implements java.lang.Cloneable java.util.Map java.io.Serializable {
+  public class Hashtable<K, V> extends java.util.Dictionary implements java.lang.Cloneable java.util.Map java.io.Serializable {
     ctor public Hashtable(int, float);
     ctor public Hashtable(int);
     ctor public Hashtable();
@@ -61319,7 +61324,7 @@
     method public java.util.Collection<V> values();
   }
 
-  public class IdentityHashMap extends java.util.AbstractMap implements java.lang.Cloneable java.util.Map java.io.Serializable {
+  public class IdentityHashMap<K, V> extends java.util.AbstractMap implements java.lang.Cloneable java.util.Map java.io.Serializable {
     ctor public IdentityHashMap();
     ctor public IdentityHashMap(int);
     ctor public IdentityHashMap(java.util.Map<? extends K, ? extends V>);
@@ -61386,14 +61391,14 @@
     ctor public InvalidPropertiesFormatException(java.lang.String);
   }
 
-  public abstract interface Iterator {
+  public abstract interface Iterator<E> {
     method public default void forEachRemaining(java.util.function.Consumer<? super E>);
     method public abstract boolean hasNext();
     method public abstract E next();
     method public default void remove();
   }
 
-  public class LinkedHashMap extends java.util.HashMap implements java.util.Map {
+  public class LinkedHashMap<K, V> extends java.util.HashMap implements java.util.Map {
     ctor public LinkedHashMap(int, float);
     ctor public LinkedHashMap(int);
     ctor public LinkedHashMap();
@@ -61402,14 +61407,14 @@
     method protected boolean removeEldestEntry(java.util.Map.Entry<K, V>);
   }
 
-  public class LinkedHashSet extends java.util.HashSet implements java.lang.Cloneable java.io.Serializable java.util.Set {
+  public class LinkedHashSet<E> extends java.util.HashSet implements java.lang.Cloneable java.io.Serializable java.util.Set {
     ctor public LinkedHashSet(int, float);
     ctor public LinkedHashSet(int);
     ctor public LinkedHashSet();
     ctor public LinkedHashSet(java.util.Collection<? extends E>);
   }
 
-  public class LinkedList extends java.util.AbstractSequentialList implements java.lang.Cloneable java.util.Deque java.util.List java.io.Serializable {
+  public class LinkedList<E> extends java.util.AbstractSequentialList implements java.lang.Cloneable java.util.Deque java.util.List java.io.Serializable {
     ctor public LinkedList();
     ctor public LinkedList(java.util.Collection<? extends E>);
     method public void addFirst(E);
@@ -61440,7 +61445,7 @@
     method public java.util.Spliterator<E> spliterator();
   }
 
-  public abstract interface List implements java.util.Collection {
+  public abstract interface List<E> implements java.util.Collection {
     method public abstract boolean add(E);
     method public abstract void add(int, E);
     method public abstract boolean addAll(java.util.Collection<? extends E>);
@@ -61467,10 +61472,10 @@
     method public default void sort(java.util.Comparator<? super E>);
     method public abstract java.util.List<E> subList(int, int);
     method public abstract java.lang.Object[] toArray();
-    method public abstract T[] toArray(T[]);
+    method public abstract <T> T[] toArray(T[]);
   }
 
-  public abstract interface ListIterator implements java.util.Iterator {
+  public abstract interface ListIterator<E> implements java.util.Iterator {
     method public abstract void add(E);
     method public abstract boolean hasNext();
     method public abstract boolean hasPrevious();
@@ -61587,7 +61592,7 @@
     method public final long getSum();
   }
 
-  public abstract interface Map {
+  public abstract interface Map<K, V> {
     method public abstract void clear();
     method public default V compute(K, java.util.function.BiFunction<? super K, ? super V, ? extends V>);
     method public default V computeIfAbsent(K, java.util.function.Function<? super K, ? extends V>);
@@ -61615,11 +61620,11 @@
     method public abstract java.util.Collection<V> values();
   }
 
-  public static abstract interface Map.Entry {
-    method public static java.util.Comparator<java.util.Map.Entry<K, V>> comparingByKey();
-    method public static java.util.Comparator<java.util.Map.Entry<K, V>> comparingByKey(java.util.Comparator<? super K>);
-    method public static java.util.Comparator<java.util.Map.Entry<K, V>> comparingByValue();
-    method public static java.util.Comparator<java.util.Map.Entry<K, V>> comparingByValue(java.util.Comparator<? super V>);
+  public static abstract interface Map.Entry<K, V> {
+    method public static <K extends java.lang.Comparable<? super K>, V> java.util.Comparator<java.util.Map.Entry<K, V>> comparingByKey();
+    method public static <K, V> java.util.Comparator<java.util.Map.Entry<K, V>> comparingByKey(java.util.Comparator<? super K>);
+    method public static <K, V extends java.lang.Comparable<? super V>> java.util.Comparator<java.util.Map.Entry<K, V>> comparingByValue();
+    method public static <K, V> java.util.Comparator<java.util.Map.Entry<K, V>> comparingByValue(java.util.Comparator<? super V>);
     method public abstract boolean equals(java.lang.Object);
     method public abstract K getKey();
     method public abstract V getValue();
@@ -61643,7 +61648,7 @@
     method public java.lang.String getKey();
   }
 
-  public abstract interface NavigableMap implements java.util.SortedMap {
+  public abstract interface NavigableMap<K, V> implements java.util.SortedMap {
     method public abstract java.util.Map.Entry<K, V> ceilingEntry(K);
     method public abstract K ceilingKey(K);
     method public abstract java.util.NavigableSet<K> descendingKeySet();
@@ -61667,7 +61672,7 @@
     method public abstract java.util.SortedMap<K, V> tailMap(K);
   }
 
-  public abstract interface NavigableSet implements java.util.SortedSet {
+  public abstract interface NavigableSet<E> implements java.util.SortedSet {
     method public abstract E ceiling(E);
     method public abstract java.util.Iterator<E> descendingIterator();
     method public abstract java.util.NavigableSet<E> descendingSet();
@@ -61691,16 +61696,16 @@
   }
 
   public final class Objects {
-    method public static int compare(T, T, java.util.Comparator<? super T>);
+    method public static <T> int compare(T, T, java.util.Comparator<? super T>);
     method public static boolean deepEquals(java.lang.Object, java.lang.Object);
     method public static boolean equals(java.lang.Object, java.lang.Object);
     method public static int hash(java.lang.Object...);
     method public static int hashCode(java.lang.Object);
     method public static boolean isNull(java.lang.Object);
     method public static boolean nonNull(java.lang.Object);
-    method public static T requireNonNull(T);
-    method public static T requireNonNull(T, java.lang.String);
-    method public static T requireNonNull(T, java.util.function.Supplier<java.lang.String>);
+    method public static <T> T requireNonNull(T);
+    method public static <T> T requireNonNull(T, java.lang.String);
+    method public static <T> T requireNonNull(T, java.util.function.Supplier<java.lang.String>);
     method public static java.lang.String toString(java.lang.Object);
     method public static java.lang.String toString(java.lang.Object, java.lang.String);
   }
@@ -61722,19 +61727,19 @@
     method public abstract void update(java.util.Observable, java.lang.Object);
   }
 
-  public final class Optional {
-    method public static java.util.Optional<T> empty();
+  public final class Optional<T> {
+    method public static <T> java.util.Optional<T> empty();
     method public java.util.Optional<T> filter(java.util.function.Predicate<? super T>);
-    method public java.util.Optional<U> flatMap(java.util.function.Function<? super T, java.util.Optional<U>>);
+    method public <U> java.util.Optional<U> flatMap(java.util.function.Function<? super T, java.util.Optional<U>>);
     method public T get();
     method public void ifPresent(java.util.function.Consumer<? super T>);
     method public boolean isPresent();
-    method public java.util.Optional<U> map(java.util.function.Function<? super T, ? extends U>);
-    method public static java.util.Optional<T> of(T);
-    method public static java.util.Optional<T> ofNullable(T);
+    method public <U> java.util.Optional<U> map(java.util.function.Function<? super T, ? extends U>);
+    method public static <T> java.util.Optional<T> of(T);
+    method public static <T> java.util.Optional<T> ofNullable(T);
     method public T orElse(T);
     method public T orElseGet(java.util.function.Supplier<? extends T>);
-    method public T orElseThrow(java.util.function.Supplier<? extends X>) throws java.lang.Throwable;
+    method public <X extends java.lang.Throwable> T orElseThrow(java.util.function.Supplier<? extends X>) throws java.lang.Throwable;
   }
 
   public final class OptionalDouble {
@@ -61745,7 +61750,7 @@
     method public static java.util.OptionalDouble of(double);
     method public double orElse(double);
     method public double orElseGet(java.util.function.DoubleSupplier);
-    method public double orElseThrow(java.util.function.Supplier<X>) throws java.lang.Throwable;
+    method public <X extends java.lang.Throwable> double orElseThrow(java.util.function.Supplier<X>) throws java.lang.Throwable;
   }
 
   public final class OptionalInt {
@@ -61756,7 +61761,7 @@
     method public static java.util.OptionalInt of(int);
     method public int orElse(int);
     method public int orElseGet(java.util.function.IntSupplier);
-    method public int orElseThrow(java.util.function.Supplier<X>) throws java.lang.Throwable;
+    method public <X extends java.lang.Throwable> int orElseThrow(java.util.function.Supplier<X>) throws java.lang.Throwable;
   }
 
   public final class OptionalLong {
@@ -61767,10 +61772,10 @@
     method public static java.util.OptionalLong of(long);
     method public long orElse(long);
     method public long orElseGet(java.util.function.LongSupplier);
-    method public long orElseThrow(java.util.function.Supplier<X>) throws java.lang.Throwable;
+    method public <X extends java.lang.Throwable> long orElseThrow(java.util.function.Supplier<X>) throws java.lang.Throwable;
   }
 
-  public abstract interface PrimitiveIterator implements java.util.Iterator {
+  public abstract interface PrimitiveIterator<T, T_CONS> implements java.util.Iterator {
     method public abstract void forEachRemaining(T_CONS);
   }
 
@@ -61795,7 +61800,7 @@
     method public abstract long nextLong();
   }
 
-  public class PriorityQueue extends java.util.AbstractQueue implements java.io.Serializable {
+  public class PriorityQueue<E> extends java.util.AbstractQueue implements java.io.Serializable {
     ctor public PriorityQueue();
     ctor public PriorityQueue(int);
     ctor public PriorityQueue(java.util.Comparator<? super E>);
@@ -61844,7 +61849,7 @@
     method public java.lang.Object handleGetObject(java.lang.String);
   }
 
-  public abstract interface Queue implements java.util.Collection {
+  public abstract interface Queue<E> implements java.util.Collection {
     method public abstract boolean add(E);
     method public abstract E element();
     method public abstract boolean offer(E);
@@ -61994,15 +61999,15 @@
     ctor public ServiceConfigurationError(java.lang.String, java.lang.Throwable);
   }
 
-  public final class ServiceLoader implements java.lang.Iterable {
+  public final class ServiceLoader<S> implements java.lang.Iterable {
     method public java.util.Iterator<S> iterator();
-    method public static java.util.ServiceLoader<S> load(java.lang.Class<S>, java.lang.ClassLoader);
-    method public static java.util.ServiceLoader<S> load(java.lang.Class<S>);
-    method public static java.util.ServiceLoader<S> loadInstalled(java.lang.Class<S>);
+    method public static <S> java.util.ServiceLoader<S> load(java.lang.Class<S>, java.lang.ClassLoader);
+    method public static <S> java.util.ServiceLoader<S> load(java.lang.Class<S>);
+    method public static <S> java.util.ServiceLoader<S> loadInstalled(java.lang.Class<S>);
     method public void reload();
   }
 
-  public abstract interface Set implements java.util.Collection {
+  public abstract interface Set<E> implements java.util.Collection {
     method public abstract boolean add(E);
     method public abstract boolean addAll(java.util.Collection<? extends E>);
     method public abstract void clear();
@@ -62017,7 +62022,7 @@
     method public abstract boolean retainAll(java.util.Collection<?>);
     method public abstract int size();
     method public abstract java.lang.Object[] toArray();
-    method public abstract T[] toArray(T[]);
+    method public abstract <T> T[] toArray(T[]);
   }
 
   public class SimpleTimeZone extends java.util.TimeZone {
@@ -62043,7 +62048,7 @@
     field public static final int WALL_TIME = 0; // 0x0
   }
 
-  public abstract interface SortedMap implements java.util.Map {
+  public abstract interface SortedMap<K, V> implements java.util.Map {
     method public abstract java.util.Comparator<? super K> comparator();
     method public abstract java.util.Set<java.util.Map.Entry<K, V>> entrySet();
     method public abstract K firstKey();
@@ -62055,7 +62060,7 @@
     method public abstract java.util.Collection<V> values();
   }
 
-  public abstract interface SortedSet implements java.util.Set {
+  public abstract interface SortedSet<E> implements java.util.Set {
     method public abstract java.util.Comparator<? super E> comparator();
     method public abstract E first();
     method public abstract java.util.SortedSet<E> headSet(E);
@@ -62064,7 +62069,7 @@
     method public abstract java.util.SortedSet<E> tailSet(E);
   }
 
-  public abstract interface Spliterator {
+  public abstract interface Spliterator<T> {
     method public abstract int characteristics();
     method public abstract long estimateSize();
     method public default void forEachRemaining(java.util.function.Consumer<? super T>);
@@ -62107,7 +62112,7 @@
     method public abstract java.util.Spliterator.OfLong trySplit();
   }
 
-  public static abstract interface Spliterator.OfPrimitive implements java.util.Spliterator {
+  public static abstract interface Spliterator.OfPrimitive<T, T_CONS, T_SPLITR extends java.util.Spliterator.OfPrimitive<T, T_CONS, T_SPLITR>> implements java.util.Spliterator {
     method public default void forEachRemaining(T_CONS);
     method public abstract boolean tryAdvance(T_CONS);
     method public abstract T_SPLITR trySplit();
@@ -62117,25 +62122,25 @@
     method public static java.util.Spliterator.OfDouble emptyDoubleSpliterator();
     method public static java.util.Spliterator.OfInt emptyIntSpliterator();
     method public static java.util.Spliterator.OfLong emptyLongSpliterator();
-    method public static java.util.Spliterator<T> emptySpliterator();
-    method public static java.util.Iterator<T> iterator(java.util.Spliterator<? extends T>);
+    method public static <T> java.util.Spliterator<T> emptySpliterator();
+    method public static <T> java.util.Iterator<T> iterator(java.util.Spliterator<? extends T>);
     method public static java.util.PrimitiveIterator.OfInt iterator(java.util.Spliterator.OfInt);
     method public static java.util.PrimitiveIterator.OfLong iterator(java.util.Spliterator.OfLong);
     method public static java.util.PrimitiveIterator.OfDouble iterator(java.util.Spliterator.OfDouble);
-    method public static java.util.Spliterator<T> spliterator(java.lang.Object[], int);
-    method public static java.util.Spliterator<T> spliterator(java.lang.Object[], int, int, int);
+    method public static <T> java.util.Spliterator<T> spliterator(java.lang.Object[], int);
+    method public static <T> java.util.Spliterator<T> spliterator(java.lang.Object[], int, int, int);
     method public static java.util.Spliterator.OfInt spliterator(int[], int);
     method public static java.util.Spliterator.OfInt spliterator(int[], int, int, int);
     method public static java.util.Spliterator.OfLong spliterator(long[], int);
     method public static java.util.Spliterator.OfLong spliterator(long[], int, int, int);
     method public static java.util.Spliterator.OfDouble spliterator(double[], int);
     method public static java.util.Spliterator.OfDouble spliterator(double[], int, int, int);
-    method public static java.util.Spliterator<T> spliterator(java.util.Collection<? extends T>, int);
-    method public static java.util.Spliterator<T> spliterator(java.util.Iterator<? extends T>, long, int);
+    method public static <T> java.util.Spliterator<T> spliterator(java.util.Collection<? extends T>, int);
+    method public static <T> java.util.Spliterator<T> spliterator(java.util.Iterator<? extends T>, long, int);
     method public static java.util.Spliterator.OfInt spliterator(java.util.PrimitiveIterator.OfInt, long, int);
     method public static java.util.Spliterator.OfLong spliterator(java.util.PrimitiveIterator.OfLong, long, int);
     method public static java.util.Spliterator.OfDouble spliterator(java.util.PrimitiveIterator.OfDouble, long, int);
-    method public static java.util.Spliterator<T> spliteratorUnknownSize(java.util.Iterator<? extends T>, int);
+    method public static <T> java.util.Spliterator<T> spliteratorUnknownSize(java.util.Iterator<? extends T>, int);
     method public static java.util.Spliterator.OfInt spliteratorUnknownSize(java.util.PrimitiveIterator.OfInt, int);
     method public static java.util.Spliterator.OfLong spliteratorUnknownSize(java.util.PrimitiveIterator.OfLong, int);
     method public static java.util.Spliterator.OfDouble spliteratorUnknownSize(java.util.PrimitiveIterator.OfDouble, int);
@@ -62162,7 +62167,7 @@
     method public java.util.Spliterator.OfLong trySplit();
   }
 
-  public static abstract class Spliterators.AbstractSpliterator implements java.util.Spliterator {
+  public static abstract class Spliterators.AbstractSpliterator<T> implements java.util.Spliterator {
     ctor protected Spliterators.AbstractSpliterator(long, int);
     method public int characteristics();
     method public long estimateSize();
@@ -62197,7 +62202,7 @@
     method public java.util.SplittableRandom split();
   }
 
-  public class Stack extends java.util.Vector {
+  public class Stack<E> extends java.util.Vector {
     ctor public Stack();
     method public boolean empty();
     method public synchronized E peek();
@@ -62281,7 +62286,7 @@
     ctor public TooManyListenersException(java.lang.String);
   }
 
-  public class TreeMap extends java.util.AbstractMap implements java.lang.Cloneable java.util.NavigableMap java.io.Serializable {
+  public class TreeMap<K, V> extends java.util.AbstractMap implements java.lang.Cloneable java.util.NavigableMap java.io.Serializable {
     ctor public TreeMap();
     ctor public TreeMap(java.util.Comparator<? super K>);
     ctor public TreeMap(java.util.Map<? extends K, ? extends V>);
@@ -62318,7 +62323,7 @@
     method public java.util.SortedMap<K, V> tailMap(K);
   }
 
-  public class TreeSet extends java.util.AbstractSet implements java.lang.Cloneable java.util.NavigableSet java.io.Serializable {
+  public class TreeSet<E> extends java.util.AbstractSet implements java.lang.Cloneable java.util.NavigableSet java.io.Serializable {
     ctor public TreeSet();
     ctor public TreeSet(java.util.Comparator<? super E>);
     ctor public TreeSet(java.util.Collection<? extends E>);
@@ -62371,7 +62376,7 @@
     method public java.lang.String getFlags();
   }
 
-  public class Vector extends java.util.AbstractList implements java.lang.Cloneable java.util.List java.util.RandomAccess java.io.Serializable {
+  public class Vector<E> extends java.util.AbstractList implements java.lang.Cloneable java.util.List java.util.RandomAccess java.io.Serializable {
     ctor public Vector(int, int);
     ctor public Vector(int);
     ctor public Vector();
@@ -62406,7 +62411,7 @@
     field protected java.lang.Object[] elementData;
   }
 
-  public class WeakHashMap extends java.util.AbstractMap implements java.util.Map {
+  public class WeakHashMap<K, V> extends java.util.AbstractMap implements java.util.Map {
     ctor public WeakHashMap(int, float);
     ctor public WeakHashMap(int);
     ctor public WeakHashMap();
@@ -62422,18 +62427,18 @@
 
   public abstract class AbstractExecutorService implements java.util.concurrent.ExecutorService {
     ctor public AbstractExecutorService();
-    method public java.util.List<java.util.concurrent.Future<T>> invokeAll(java.util.Collection<? extends java.util.concurrent.Callable<T>>) throws java.lang.InterruptedException;
-    method public java.util.List<java.util.concurrent.Future<T>> invokeAll(java.util.Collection<? extends java.util.concurrent.Callable<T>>, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
-    method public T invokeAny(java.util.Collection<? extends java.util.concurrent.Callable<T>>) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException;
-    method public T invokeAny(java.util.Collection<? extends java.util.concurrent.Callable<T>>, long, java.util.concurrent.TimeUnit) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException, java.util.concurrent.TimeoutException;
-    method protected java.util.concurrent.RunnableFuture<T> newTaskFor(java.lang.Runnable, T);
-    method protected java.util.concurrent.RunnableFuture<T> newTaskFor(java.util.concurrent.Callable<T>);
+    method public <T> java.util.List<java.util.concurrent.Future<T>> invokeAll(java.util.Collection<? extends java.util.concurrent.Callable<T>>) throws java.lang.InterruptedException;
+    method public <T> java.util.List<java.util.concurrent.Future<T>> invokeAll(java.util.Collection<? extends java.util.concurrent.Callable<T>>, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public <T> T invokeAny(java.util.Collection<? extends java.util.concurrent.Callable<T>>) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException;
+    method public <T> T invokeAny(java.util.Collection<? extends java.util.concurrent.Callable<T>>, long, java.util.concurrent.TimeUnit) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException, java.util.concurrent.TimeoutException;
+    method protected <T> java.util.concurrent.RunnableFuture<T> newTaskFor(java.lang.Runnable, T);
+    method protected <T> java.util.concurrent.RunnableFuture<T> newTaskFor(java.util.concurrent.Callable<T>);
     method public java.util.concurrent.Future<?> submit(java.lang.Runnable);
-    method public java.util.concurrent.Future<T> submit(java.lang.Runnable, T);
-    method public java.util.concurrent.Future<T> submit(java.util.concurrent.Callable<T>);
+    method public <T> java.util.concurrent.Future<T> submit(java.lang.Runnable, T);
+    method public <T> java.util.concurrent.Future<T> submit(java.util.concurrent.Callable<T>);
   }
 
-  public class ArrayBlockingQueue extends java.util.AbstractQueue implements java.util.concurrent.BlockingQueue java.io.Serializable {
+  public class ArrayBlockingQueue<E> extends java.util.AbstractQueue implements java.util.concurrent.BlockingQueue java.io.Serializable {
     ctor public ArrayBlockingQueue(int);
     ctor public ArrayBlockingQueue(int, boolean);
     ctor public ArrayBlockingQueue(int, boolean, java.util.Collection<? extends E>);
@@ -62452,7 +62457,7 @@
     method public E take() throws java.lang.InterruptedException;
   }
 
-  public abstract interface BlockingDeque implements java.util.concurrent.BlockingQueue java.util.Deque {
+  public abstract interface BlockingDeque<E> implements java.util.concurrent.BlockingQueue java.util.Deque {
     method public abstract boolean add(E);
     method public abstract void addFirst(E);
     method public abstract void addLast(E);
@@ -62484,7 +62489,7 @@
     method public abstract E takeLast() throws java.lang.InterruptedException;
   }
 
-  public abstract interface BlockingQueue implements java.util.Queue {
+  public abstract interface BlockingQueue<E> implements java.util.Queue {
     method public abstract boolean add(E);
     method public abstract boolean contains(java.lang.Object);
     method public abstract int drainTo(java.util.Collection<? super E>);
@@ -62503,7 +62508,7 @@
     ctor public BrokenBarrierException(java.lang.String);
   }
 
-  public abstract interface Callable {
+  public abstract interface Callable<V> {
     method public abstract V call() throws java.lang.Exception;
   }
 
@@ -62512,28 +62517,28 @@
     ctor public CancellationException(java.lang.String);
   }
 
-  public class CompletableFuture implements java.util.concurrent.CompletionStage java.util.concurrent.Future {
+  public class CompletableFuture<T> implements java.util.concurrent.CompletionStage java.util.concurrent.Future {
     ctor public CompletableFuture();
     method public java.util.concurrent.CompletableFuture<java.lang.Void> acceptEither(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Consumer<? super T>);
     method public java.util.concurrent.CompletableFuture<java.lang.Void> acceptEitherAsync(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Consumer<? super T>);
     method public java.util.concurrent.CompletableFuture<java.lang.Void> acceptEitherAsync(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Consumer<? super T>, java.util.concurrent.Executor);
     method public static java.util.concurrent.CompletableFuture<java.lang.Void> allOf(java.util.concurrent.CompletableFuture<?>...);
     method public static java.util.concurrent.CompletableFuture<java.lang.Object> anyOf(java.util.concurrent.CompletableFuture<?>...);
-    method public java.util.concurrent.CompletableFuture<U> applyToEither(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Function<? super T, U>);
-    method public java.util.concurrent.CompletableFuture<U> applyToEitherAsync(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Function<? super T, U>);
-    method public java.util.concurrent.CompletableFuture<U> applyToEitherAsync(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Function<? super T, U>, java.util.concurrent.Executor);
+    method public <U> java.util.concurrent.CompletableFuture<U> applyToEither(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Function<? super T, U>);
+    method public <U> java.util.concurrent.CompletableFuture<U> applyToEitherAsync(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Function<? super T, U>);
+    method public <U> java.util.concurrent.CompletableFuture<U> applyToEitherAsync(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Function<? super T, U>, java.util.concurrent.Executor);
     method public boolean cancel(boolean);
     method public boolean complete(T);
     method public boolean completeExceptionally(java.lang.Throwable);
-    method public static java.util.concurrent.CompletableFuture<U> completedFuture(U);
+    method public static <U> java.util.concurrent.CompletableFuture<U> completedFuture(U);
     method public java.util.concurrent.CompletableFuture<T> exceptionally(java.util.function.Function<java.lang.Throwable, ? extends T>);
     method public T get() throws java.util.concurrent.ExecutionException, java.lang.InterruptedException;
     method public T get(long, java.util.concurrent.TimeUnit) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException, java.util.concurrent.TimeoutException;
     method public T getNow(T);
     method public int getNumberOfDependents();
-    method public java.util.concurrent.CompletableFuture<U> handle(java.util.function.BiFunction<? super T, java.lang.Throwable, ? extends U>);
-    method public java.util.concurrent.CompletableFuture<U> handleAsync(java.util.function.BiFunction<? super T, java.lang.Throwable, ? extends U>);
-    method public java.util.concurrent.CompletableFuture<U> handleAsync(java.util.function.BiFunction<? super T, java.lang.Throwable, ? extends U>, java.util.concurrent.Executor);
+    method public <U> java.util.concurrent.CompletableFuture<U> handle(java.util.function.BiFunction<? super T, java.lang.Throwable, ? extends U>);
+    method public <U> java.util.concurrent.CompletableFuture<U> handleAsync(java.util.function.BiFunction<? super T, java.lang.Throwable, ? extends U>);
+    method public <U> java.util.concurrent.CompletableFuture<U> handleAsync(java.util.function.BiFunction<? super T, java.lang.Throwable, ? extends U>, java.util.concurrent.Executor);
     method public boolean isCancelled();
     method public boolean isCompletedExceptionally();
     method public boolean isDone();
@@ -62548,23 +62553,23 @@
     method public java.util.concurrent.CompletableFuture<java.lang.Void> runAfterEitherAsync(java.util.concurrent.CompletionStage<?>, java.lang.Runnable, java.util.concurrent.Executor);
     method public static java.util.concurrent.CompletableFuture<java.lang.Void> runAsync(java.lang.Runnable);
     method public static java.util.concurrent.CompletableFuture<java.lang.Void> runAsync(java.lang.Runnable, java.util.concurrent.Executor);
-    method public static java.util.concurrent.CompletableFuture<U> supplyAsync(java.util.function.Supplier<U>);
-    method public static java.util.concurrent.CompletableFuture<U> supplyAsync(java.util.function.Supplier<U>, java.util.concurrent.Executor);
+    method public static <U> java.util.concurrent.CompletableFuture<U> supplyAsync(java.util.function.Supplier<U>);
+    method public static <U> java.util.concurrent.CompletableFuture<U> supplyAsync(java.util.function.Supplier<U>, java.util.concurrent.Executor);
     method public java.util.concurrent.CompletableFuture<java.lang.Void> thenAccept(java.util.function.Consumer<? super T>);
     method public java.util.concurrent.CompletableFuture<java.lang.Void> thenAcceptAsync(java.util.function.Consumer<? super T>);
     method public java.util.concurrent.CompletableFuture<java.lang.Void> thenAcceptAsync(java.util.function.Consumer<? super T>, java.util.concurrent.Executor);
-    method public java.util.concurrent.CompletableFuture<java.lang.Void> thenAcceptBoth(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiConsumer<? super T, ? super U>);
-    method public java.util.concurrent.CompletableFuture<java.lang.Void> thenAcceptBothAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiConsumer<? super T, ? super U>);
-    method public java.util.concurrent.CompletableFuture<java.lang.Void> thenAcceptBothAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiConsumer<? super T, ? super U>, java.util.concurrent.Executor);
-    method public java.util.concurrent.CompletableFuture<U> thenApply(java.util.function.Function<? super T, ? extends U>);
-    method public java.util.concurrent.CompletableFuture<U> thenApplyAsync(java.util.function.Function<? super T, ? extends U>);
-    method public java.util.concurrent.CompletableFuture<U> thenApplyAsync(java.util.function.Function<? super T, ? extends U>, java.util.concurrent.Executor);
-    method public java.util.concurrent.CompletableFuture<V> thenCombine(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiFunction<? super T, ? super U, ? extends V>);
-    method public java.util.concurrent.CompletableFuture<V> thenCombineAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiFunction<? super T, ? super U, ? extends V>);
-    method public java.util.concurrent.CompletableFuture<V> thenCombineAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiFunction<? super T, ? super U, ? extends V>, java.util.concurrent.Executor);
-    method public java.util.concurrent.CompletableFuture<U> thenCompose(java.util.function.Function<? super T, ? extends java.util.concurrent.CompletionStage<U>>);
-    method public java.util.concurrent.CompletableFuture<U> thenComposeAsync(java.util.function.Function<? super T, ? extends java.util.concurrent.CompletionStage<U>>);
-    method public java.util.concurrent.CompletableFuture<U> thenComposeAsync(java.util.function.Function<? super T, ? extends java.util.concurrent.CompletionStage<U>>, java.util.concurrent.Executor);
+    method public <U> java.util.concurrent.CompletableFuture<java.lang.Void> thenAcceptBoth(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiConsumer<? super T, ? super U>);
+    method public <U> java.util.concurrent.CompletableFuture<java.lang.Void> thenAcceptBothAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiConsumer<? super T, ? super U>);
+    method public <U> java.util.concurrent.CompletableFuture<java.lang.Void> thenAcceptBothAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiConsumer<? super T, ? super U>, java.util.concurrent.Executor);
+    method public <U> java.util.concurrent.CompletableFuture<U> thenApply(java.util.function.Function<? super T, ? extends U>);
+    method public <U> java.util.concurrent.CompletableFuture<U> thenApplyAsync(java.util.function.Function<? super T, ? extends U>);
+    method public <U> java.util.concurrent.CompletableFuture<U> thenApplyAsync(java.util.function.Function<? super T, ? extends U>, java.util.concurrent.Executor);
+    method public <U, V> java.util.concurrent.CompletableFuture<V> thenCombine(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiFunction<? super T, ? super U, ? extends V>);
+    method public <U, V> java.util.concurrent.CompletableFuture<V> thenCombineAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiFunction<? super T, ? super U, ? extends V>);
+    method public <U, V> java.util.concurrent.CompletableFuture<V> thenCombineAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiFunction<? super T, ? super U, ? extends V>, java.util.concurrent.Executor);
+    method public <U> java.util.concurrent.CompletableFuture<U> thenCompose(java.util.function.Function<? super T, ? extends java.util.concurrent.CompletionStage<U>>);
+    method public <U> java.util.concurrent.CompletableFuture<U> thenComposeAsync(java.util.function.Function<? super T, ? extends java.util.concurrent.CompletionStage<U>>);
+    method public <U> java.util.concurrent.CompletableFuture<U> thenComposeAsync(java.util.function.Function<? super T, ? extends java.util.concurrent.CompletionStage<U>>, java.util.concurrent.Executor);
     method public java.util.concurrent.CompletableFuture<java.lang.Void> thenRun(java.lang.Runnable);
     method public java.util.concurrent.CompletableFuture<java.lang.Void> thenRunAsync(java.lang.Runnable);
     method public java.util.concurrent.CompletableFuture<java.lang.Void> thenRunAsync(java.lang.Runnable, java.util.concurrent.Executor);
@@ -62584,7 +62589,7 @@
     ctor public CompletionException(java.lang.Throwable);
   }
 
-  public abstract interface CompletionService {
+  public abstract interface CompletionService<V> {
     method public abstract java.util.concurrent.Future<V> poll();
     method public abstract java.util.concurrent.Future<V> poll(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
     method public abstract java.util.concurrent.Future<V> submit(java.util.concurrent.Callable<V>);
@@ -62592,17 +62597,17 @@
     method public abstract java.util.concurrent.Future<V> take() throws java.lang.InterruptedException;
   }
 
-  public abstract interface CompletionStage {
+  public abstract interface CompletionStage<T> {
     method public abstract java.util.concurrent.CompletionStage<java.lang.Void> acceptEither(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Consumer<? super T>);
     method public abstract java.util.concurrent.CompletionStage<java.lang.Void> acceptEitherAsync(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Consumer<? super T>);
     method public abstract java.util.concurrent.CompletionStage<java.lang.Void> acceptEitherAsync(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Consumer<? super T>, java.util.concurrent.Executor);
-    method public abstract java.util.concurrent.CompletionStage<U> applyToEither(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Function<? super T, U>);
-    method public abstract java.util.concurrent.CompletionStage<U> applyToEitherAsync(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Function<? super T, U>);
-    method public abstract java.util.concurrent.CompletionStage<U> applyToEitherAsync(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Function<? super T, U>, java.util.concurrent.Executor);
+    method public abstract <U> java.util.concurrent.CompletionStage<U> applyToEither(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Function<? super T, U>);
+    method public abstract <U> java.util.concurrent.CompletionStage<U> applyToEitherAsync(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Function<? super T, U>);
+    method public abstract <U> java.util.concurrent.CompletionStage<U> applyToEitherAsync(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Function<? super T, U>, java.util.concurrent.Executor);
     method public abstract java.util.concurrent.CompletionStage<T> exceptionally(java.util.function.Function<java.lang.Throwable, ? extends T>);
-    method public abstract java.util.concurrent.CompletionStage<U> handle(java.util.function.BiFunction<? super T, java.lang.Throwable, ? extends U>);
-    method public abstract java.util.concurrent.CompletionStage<U> handleAsync(java.util.function.BiFunction<? super T, java.lang.Throwable, ? extends U>);
-    method public abstract java.util.concurrent.CompletionStage<U> handleAsync(java.util.function.BiFunction<? super T, java.lang.Throwable, ? extends U>, java.util.concurrent.Executor);
+    method public abstract <U> java.util.concurrent.CompletionStage<U> handle(java.util.function.BiFunction<? super T, java.lang.Throwable, ? extends U>);
+    method public abstract <U> java.util.concurrent.CompletionStage<U> handleAsync(java.util.function.BiFunction<? super T, java.lang.Throwable, ? extends U>);
+    method public abstract <U> java.util.concurrent.CompletionStage<U> handleAsync(java.util.function.BiFunction<? super T, java.lang.Throwable, ? extends U>, java.util.concurrent.Executor);
     method public abstract java.util.concurrent.CompletionStage<java.lang.Void> runAfterBoth(java.util.concurrent.CompletionStage<?>, java.lang.Runnable);
     method public abstract java.util.concurrent.CompletionStage<java.lang.Void> runAfterBothAsync(java.util.concurrent.CompletionStage<?>, java.lang.Runnable);
     method public abstract java.util.concurrent.CompletionStage<java.lang.Void> runAfterBothAsync(java.util.concurrent.CompletionStage<?>, java.lang.Runnable, java.util.concurrent.Executor);
@@ -62612,18 +62617,18 @@
     method public abstract java.util.concurrent.CompletionStage<java.lang.Void> thenAccept(java.util.function.Consumer<? super T>);
     method public abstract java.util.concurrent.CompletionStage<java.lang.Void> thenAcceptAsync(java.util.function.Consumer<? super T>);
     method public abstract java.util.concurrent.CompletionStage<java.lang.Void> thenAcceptAsync(java.util.function.Consumer<? super T>, java.util.concurrent.Executor);
-    method public abstract java.util.concurrent.CompletionStage<java.lang.Void> thenAcceptBoth(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiConsumer<? super T, ? super U>);
-    method public abstract java.util.concurrent.CompletionStage<java.lang.Void> thenAcceptBothAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiConsumer<? super T, ? super U>);
-    method public abstract java.util.concurrent.CompletionStage<java.lang.Void> thenAcceptBothAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiConsumer<? super T, ? super U>, java.util.concurrent.Executor);
-    method public abstract java.util.concurrent.CompletionStage<U> thenApply(java.util.function.Function<? super T, ? extends U>);
-    method public abstract java.util.concurrent.CompletionStage<U> thenApplyAsync(java.util.function.Function<? super T, ? extends U>);
-    method public abstract java.util.concurrent.CompletionStage<U> thenApplyAsync(java.util.function.Function<? super T, ? extends U>, java.util.concurrent.Executor);
-    method public abstract java.util.concurrent.CompletionStage<V> thenCombine(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiFunction<? super T, ? super U, ? extends V>);
-    method public abstract java.util.concurrent.CompletionStage<V> thenCombineAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiFunction<? super T, ? super U, ? extends V>);
-    method public abstract java.util.concurrent.CompletionStage<V> thenCombineAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiFunction<? super T, ? super U, ? extends V>, java.util.concurrent.Executor);
-    method public abstract java.util.concurrent.CompletionStage<U> thenCompose(java.util.function.Function<? super T, ? extends java.util.concurrent.CompletionStage<U>>);
-    method public abstract java.util.concurrent.CompletionStage<U> thenComposeAsync(java.util.function.Function<? super T, ? extends java.util.concurrent.CompletionStage<U>>);
-    method public abstract java.util.concurrent.CompletionStage<U> thenComposeAsync(java.util.function.Function<? super T, ? extends java.util.concurrent.CompletionStage<U>>, java.util.concurrent.Executor);
+    method public abstract <U> java.util.concurrent.CompletionStage<java.lang.Void> thenAcceptBoth(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiConsumer<? super T, ? super U>);
+    method public abstract <U> java.util.concurrent.CompletionStage<java.lang.Void> thenAcceptBothAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiConsumer<? super T, ? super U>);
+    method public abstract <U> java.util.concurrent.CompletionStage<java.lang.Void> thenAcceptBothAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiConsumer<? super T, ? super U>, java.util.concurrent.Executor);
+    method public abstract <U> java.util.concurrent.CompletionStage<U> thenApply(java.util.function.Function<? super T, ? extends U>);
+    method public abstract <U> java.util.concurrent.CompletionStage<U> thenApplyAsync(java.util.function.Function<? super T, ? extends U>);
+    method public abstract <U> java.util.concurrent.CompletionStage<U> thenApplyAsync(java.util.function.Function<? super T, ? extends U>, java.util.concurrent.Executor);
+    method public abstract <U, V> java.util.concurrent.CompletionStage<V> thenCombine(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiFunction<? super T, ? super U, ? extends V>);
+    method public abstract <U, V> java.util.concurrent.CompletionStage<V> thenCombineAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiFunction<? super T, ? super U, ? extends V>);
+    method public abstract <U, V> java.util.concurrent.CompletionStage<V> thenCombineAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiFunction<? super T, ? super U, ? extends V>, java.util.concurrent.Executor);
+    method public abstract <U> java.util.concurrent.CompletionStage<U> thenCompose(java.util.function.Function<? super T, ? extends java.util.concurrent.CompletionStage<U>>);
+    method public abstract <U> java.util.concurrent.CompletionStage<U> thenComposeAsync(java.util.function.Function<? super T, ? extends java.util.concurrent.CompletionStage<U>>);
+    method public abstract <U> java.util.concurrent.CompletionStage<U> thenComposeAsync(java.util.function.Function<? super T, ? extends java.util.concurrent.CompletionStage<U>>, java.util.concurrent.Executor);
     method public abstract java.util.concurrent.CompletionStage<java.lang.Void> thenRun(java.lang.Runnable);
     method public abstract java.util.concurrent.CompletionStage<java.lang.Void> thenRunAsync(java.lang.Runnable);
     method public abstract java.util.concurrent.CompletionStage<java.lang.Void> thenRunAsync(java.lang.Runnable, java.util.concurrent.Executor);
@@ -62633,7 +62638,7 @@
     method public abstract java.util.concurrent.CompletionStage<T> whenCompleteAsync(java.util.function.BiConsumer<? super T, ? super java.lang.Throwable>, java.util.concurrent.Executor);
   }
 
-  public class ConcurrentHashMap extends java.util.AbstractMap implements java.util.concurrent.ConcurrentMap java.io.Serializable {
+  public class ConcurrentHashMap<K, V> extends java.util.AbstractMap implements java.util.concurrent.ConcurrentMap java.io.Serializable {
     ctor public ConcurrentHashMap();
     ctor public ConcurrentHashMap(int);
     ctor public ConcurrentHashMap(java.util.Map<? extends K, ? extends V>);
@@ -62647,29 +62652,29 @@
     method public java.util.Set<java.util.Map.Entry<K, V>> entrySet();
     method public void forEach(java.util.function.BiConsumer<? super K, ? super V>);
     method public void forEach(long, java.util.function.BiConsumer<? super K, ? super V>);
-    method public void forEach(long, java.util.function.BiFunction<? super K, ? super V, ? extends U>, java.util.function.Consumer<? super U>);
+    method public <U> void forEach(long, java.util.function.BiFunction<? super K, ? super V, ? extends U>, java.util.function.Consumer<? super U>);
     method public void forEachEntry(long, java.util.function.Consumer<? super java.util.Map.Entry<K, V>>);
-    method public void forEachEntry(long, java.util.function.Function<java.util.Map.Entry<K, V>, ? extends U>, java.util.function.Consumer<? super U>);
+    method public <U> void forEachEntry(long, java.util.function.Function<java.util.Map.Entry<K, V>, ? extends U>, java.util.function.Consumer<? super U>);
     method public void forEachKey(long, java.util.function.Consumer<? super K>);
-    method public void forEachKey(long, java.util.function.Function<? super K, ? extends U>, java.util.function.Consumer<? super U>);
+    method public <U> void forEachKey(long, java.util.function.Function<? super K, ? extends U>, java.util.function.Consumer<? super U>);
     method public void forEachValue(long, java.util.function.Consumer<? super V>);
-    method public void forEachValue(long, java.util.function.Function<? super V, ? extends U>, java.util.function.Consumer<? super U>);
+    method public <U> void forEachValue(long, java.util.function.Function<? super V, ? extends U>, java.util.function.Consumer<? super U>);
     method public V getOrDefault(java.lang.Object, V);
     method public java.util.concurrent.ConcurrentHashMap.KeySetView<K, V> keySet(V);
     method public java.util.Enumeration<K> keys();
     method public long mappingCount();
     method public V merge(K, V, java.util.function.BiFunction<? super V, ? super V, ? extends V>);
-    method public static java.util.concurrent.ConcurrentHashMap.KeySetView<K, java.lang.Boolean> newKeySet();
-    method public static java.util.concurrent.ConcurrentHashMap.KeySetView<K, java.lang.Boolean> newKeySet(int);
+    method public static <K> java.util.concurrent.ConcurrentHashMap.KeySetView<K, java.lang.Boolean> newKeySet();
+    method public static <K> java.util.concurrent.ConcurrentHashMap.KeySetView<K, java.lang.Boolean> newKeySet(int);
     method public V putIfAbsent(K, V);
-    method public U reduce(long, java.util.function.BiFunction<? super K, ? super V, ? extends U>, java.util.function.BiFunction<? super U, ? super U, ? extends U>);
+    method public <U> U reduce(long, java.util.function.BiFunction<? super K, ? super V, ? extends U>, java.util.function.BiFunction<? super U, ? super U, ? extends U>);
     method public java.util.Map.Entry<K, V> reduceEntries(long, java.util.function.BiFunction<java.util.Map.Entry<K, V>, java.util.Map.Entry<K, V>, ? extends java.util.Map.Entry<K, V>>);
-    method public U reduceEntries(long, java.util.function.Function<java.util.Map.Entry<K, V>, ? extends U>, java.util.function.BiFunction<? super U, ? super U, ? extends U>);
+    method public <U> U reduceEntries(long, java.util.function.Function<java.util.Map.Entry<K, V>, ? extends U>, java.util.function.BiFunction<? super U, ? super U, ? extends U>);
     method public double reduceEntriesToDouble(long, java.util.function.ToDoubleFunction<java.util.Map.Entry<K, V>>, double, java.util.function.DoubleBinaryOperator);
     method public int reduceEntriesToInt(long, java.util.function.ToIntFunction<java.util.Map.Entry<K, V>>, int, java.util.function.IntBinaryOperator);
     method public long reduceEntriesToLong(long, java.util.function.ToLongFunction<java.util.Map.Entry<K, V>>, long, java.util.function.LongBinaryOperator);
     method public K reduceKeys(long, java.util.function.BiFunction<? super K, ? super K, ? extends K>);
-    method public U reduceKeys(long, java.util.function.Function<? super K, ? extends U>, java.util.function.BiFunction<? super U, ? super U, ? extends U>);
+    method public <U> U reduceKeys(long, java.util.function.Function<? super K, ? extends U>, java.util.function.BiFunction<? super U, ? super U, ? extends U>);
     method public double reduceKeysToDouble(long, java.util.function.ToDoubleFunction<? super K>, double, java.util.function.DoubleBinaryOperator);
     method public int reduceKeysToInt(long, java.util.function.ToIntFunction<? super K>, int, java.util.function.IntBinaryOperator);
     method public long reduceKeysToLong(long, java.util.function.ToLongFunction<? super K>, long, java.util.function.LongBinaryOperator);
@@ -62677,7 +62682,7 @@
     method public int reduceToInt(long, java.util.function.ToIntBiFunction<? super K, ? super V>, int, java.util.function.IntBinaryOperator);
     method public long reduceToLong(long, java.util.function.ToLongBiFunction<? super K, ? super V>, long, java.util.function.LongBinaryOperator);
     method public V reduceValues(long, java.util.function.BiFunction<? super V, ? super V, ? extends V>);
-    method public U reduceValues(long, java.util.function.Function<? super V, ? extends U>, java.util.function.BiFunction<? super U, ? super U, ? extends U>);
+    method public <U> U reduceValues(long, java.util.function.Function<? super V, ? extends U>, java.util.function.BiFunction<? super U, ? super U, ? extends U>);
     method public double reduceValuesToDouble(long, java.util.function.ToDoubleFunction<? super V>, double, java.util.function.DoubleBinaryOperator);
     method public int reduceValuesToInt(long, java.util.function.ToIntFunction<? super V>, int, java.util.function.IntBinaryOperator);
     method public long reduceValuesToLong(long, java.util.function.ToLongFunction<? super V>, long, java.util.function.LongBinaryOperator);
@@ -62685,13 +62690,13 @@
     method public boolean replace(K, V, V);
     method public V replace(K, V);
     method public void replaceAll(java.util.function.BiFunction<? super K, ? super V, ? extends V>);
-    method public U search(long, java.util.function.BiFunction<? super K, ? super V, ? extends U>);
-    method public U searchEntries(long, java.util.function.Function<java.util.Map.Entry<K, V>, ? extends U>);
-    method public U searchKeys(long, java.util.function.Function<? super K, ? extends U>);
-    method public U searchValues(long, java.util.function.Function<? super V, ? extends U>);
+    method public <U> U search(long, java.util.function.BiFunction<? super K, ? super V, ? extends U>);
+    method public <U> U searchEntries(long, java.util.function.Function<java.util.Map.Entry<K, V>, ? extends U>);
+    method public <U> U searchKeys(long, java.util.function.Function<? super K, ? extends U>);
+    method public <U> U searchValues(long, java.util.function.Function<? super V, ? extends U>);
   }
 
-   static abstract class ConcurrentHashMap.CollectionView implements java.util.Collection java.io.Serializable {
+   static abstract class ConcurrentHashMap.CollectionView<K, V, E> implements java.util.Collection java.io.Serializable {
     method public final void clear();
     method public abstract boolean contains(java.lang.Object);
     method public final boolean containsAll(java.util.Collection<?>);
@@ -62703,11 +62708,11 @@
     method public final boolean retainAll(java.util.Collection<?>);
     method public final int size();
     method public final java.lang.Object[] toArray();
-    method public final T[] toArray(T[]);
+    method public final <T> T[] toArray(T[]);
     method public final java.lang.String toString();
   }
 
-  public static class ConcurrentHashMap.KeySetView extends java.util.concurrent.ConcurrentHashMap.CollectionView implements java.io.Serializable java.util.Set {
+  public static class ConcurrentHashMap.KeySetView<K, V> extends java.util.concurrent.ConcurrentHashMap.CollectionView implements java.io.Serializable java.util.Set {
     method public boolean add(K);
     method public boolean addAll(java.util.Collection<? extends K>);
     method public boolean contains(java.lang.Object);
@@ -62718,7 +62723,7 @@
     method public java.util.Spliterator<K> spliterator();
   }
 
-  public class ConcurrentLinkedDeque extends java.util.AbstractCollection implements java.util.Deque java.io.Serializable {
+  public class ConcurrentLinkedDeque<E> extends java.util.AbstractCollection implements java.util.Deque java.io.Serializable {
     ctor public ConcurrentLinkedDeque();
     ctor public ConcurrentLinkedDeque(java.util.Collection<? extends E>);
     method public void addFirst(E);
@@ -62748,7 +62753,7 @@
     method public java.util.Spliterator<E> spliterator();
   }
 
-  public class ConcurrentLinkedQueue extends java.util.AbstractQueue implements java.util.Queue java.io.Serializable {
+  public class ConcurrentLinkedQueue<E> extends java.util.AbstractQueue implements java.util.Queue java.io.Serializable {
     ctor public ConcurrentLinkedQueue();
     ctor public ConcurrentLinkedQueue(java.util.Collection<? extends E>);
     method public java.util.Iterator<E> iterator();
@@ -62759,14 +62764,14 @@
     method public java.util.Spliterator<E> spliterator();
   }
 
-  public abstract interface ConcurrentMap implements java.util.Map {
+  public abstract interface ConcurrentMap<K, V> implements java.util.Map {
     method public abstract V putIfAbsent(K, V);
     method public abstract boolean remove(java.lang.Object, java.lang.Object);
     method public abstract boolean replace(K, V, V);
     method public abstract V replace(K, V);
   }
 
-  public abstract interface ConcurrentNavigableMap implements java.util.concurrent.ConcurrentMap java.util.NavigableMap {
+  public abstract interface ConcurrentNavigableMap<K, V> implements java.util.concurrent.ConcurrentMap java.util.NavigableMap {
     method public abstract java.util.NavigableSet<K> descendingKeySet();
     method public abstract java.util.concurrent.ConcurrentNavigableMap<K, V> descendingMap();
     method public abstract java.util.concurrent.ConcurrentNavigableMap<K, V> headMap(K, boolean);
@@ -62779,7 +62784,7 @@
     method public abstract java.util.concurrent.ConcurrentNavigableMap<K, V> tailMap(K);
   }
 
-  public class ConcurrentSkipListMap extends java.util.AbstractMap implements java.lang.Cloneable java.util.concurrent.ConcurrentNavigableMap java.io.Serializable {
+  public class ConcurrentSkipListMap<K, V> extends java.util.AbstractMap implements java.lang.Cloneable java.util.concurrent.ConcurrentNavigableMap java.io.Serializable {
     ctor public ConcurrentSkipListMap();
     ctor public ConcurrentSkipListMap(java.util.Comparator<? super K>);
     ctor public ConcurrentSkipListMap(java.util.Map<? extends K, ? extends V>);
@@ -62823,7 +62828,7 @@
     method public java.util.concurrent.ConcurrentNavigableMap<K, V> tailMap(K);
   }
 
-  public class ConcurrentSkipListSet extends java.util.AbstractSet implements java.lang.Cloneable java.util.NavigableSet java.io.Serializable {
+  public class ConcurrentSkipListSet<E> extends java.util.AbstractSet implements java.lang.Cloneable java.util.NavigableSet java.io.Serializable {
     ctor public ConcurrentSkipListSet();
     ctor public ConcurrentSkipListSet(java.util.Comparator<? super E>);
     ctor public ConcurrentSkipListSet(java.util.Collection<? extends E>);
@@ -62851,7 +62856,7 @@
     method public java.util.NavigableSet<E> tailSet(E);
   }
 
-  public class CopyOnWriteArrayList implements java.lang.Cloneable java.util.List java.util.RandomAccess java.io.Serializable {
+  public class CopyOnWriteArrayList<E> implements java.lang.Cloneable java.util.List java.util.RandomAccess java.io.Serializable {
     ctor public CopyOnWriteArrayList();
     ctor public CopyOnWriteArrayList(java.util.Collection<? extends E>);
     ctor public CopyOnWriteArrayList(E[]);
@@ -62883,10 +62888,10 @@
     method public int size();
     method public java.util.List<E> subList(int, int);
     method public java.lang.Object[] toArray();
-    method public T[] toArray(T[]);
+    method public <T> T[] toArray(T[]);
   }
 
-  public class CopyOnWriteArraySet extends java.util.AbstractSet implements java.io.Serializable {
+  public class CopyOnWriteArraySet<E> extends java.util.AbstractSet implements java.io.Serializable {
     ctor public CopyOnWriteArraySet();
     ctor public CopyOnWriteArraySet(java.util.Collection<? extends E>);
     method public void forEach(java.util.function.Consumer<? super E>);
@@ -62904,7 +62909,7 @@
     method public long getCount();
   }
 
-  public abstract class CountedCompleter extends java.util.concurrent.ForkJoinTask {
+  public abstract class CountedCompleter<T> extends java.util.concurrent.ForkJoinTask {
     ctor protected CountedCompleter(java.util.concurrent.CountedCompleter<?>, int);
     ctor protected CountedCompleter(java.util.concurrent.CountedCompleter<?>);
     ctor protected CountedCompleter();
@@ -62941,7 +62946,7 @@
     method public void reset();
   }
 
-  public class DelayQueue extends java.util.AbstractQueue implements java.util.concurrent.BlockingQueue {
+  public class DelayQueue<E extends java.util.concurrent.Delayed> extends java.util.AbstractQueue implements java.util.concurrent.BlockingQueue {
     ctor public DelayQueue();
     ctor public DelayQueue(java.util.Collection<? extends E>);
     method public int drainTo(java.util.Collection<? super E>);
@@ -62962,7 +62967,7 @@
     method public abstract long getDelay(java.util.concurrent.TimeUnit);
   }
 
-  public class Exchanger {
+  public class Exchanger<V> {
     ctor public Exchanger();
     method public V exchange(V) throws java.lang.InterruptedException;
     method public V exchange(V, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException, java.util.concurrent.TimeoutException;
@@ -62979,7 +62984,7 @@
     method public abstract void execute(java.lang.Runnable);
   }
 
-  public class ExecutorCompletionService implements java.util.concurrent.CompletionService {
+  public class ExecutorCompletionService<V> implements java.util.concurrent.CompletionService {
     ctor public ExecutorCompletionService(java.util.concurrent.Executor);
     ctor public ExecutorCompletionService(java.util.concurrent.Executor, java.util.concurrent.BlockingQueue<java.util.concurrent.Future<V>>);
     method public java.util.concurrent.Future<V> poll();
@@ -62991,21 +62996,21 @@
 
   public abstract interface ExecutorService implements java.util.concurrent.Executor {
     method public abstract boolean awaitTermination(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
-    method public abstract java.util.List<java.util.concurrent.Future<T>> invokeAll(java.util.Collection<? extends java.util.concurrent.Callable<T>>) throws java.lang.InterruptedException;
-    method public abstract java.util.List<java.util.concurrent.Future<T>> invokeAll(java.util.Collection<? extends java.util.concurrent.Callable<T>>, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
-    method public abstract T invokeAny(java.util.Collection<? extends java.util.concurrent.Callable<T>>) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException;
-    method public abstract T invokeAny(java.util.Collection<? extends java.util.concurrent.Callable<T>>, long, java.util.concurrent.TimeUnit) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException, java.util.concurrent.TimeoutException;
+    method public abstract <T> java.util.List<java.util.concurrent.Future<T>> invokeAll(java.util.Collection<? extends java.util.concurrent.Callable<T>>) throws java.lang.InterruptedException;
+    method public abstract <T> java.util.List<java.util.concurrent.Future<T>> invokeAll(java.util.Collection<? extends java.util.concurrent.Callable<T>>, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public abstract <T> T invokeAny(java.util.Collection<? extends java.util.concurrent.Callable<T>>) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException;
+    method public abstract <T> T invokeAny(java.util.Collection<? extends java.util.concurrent.Callable<T>>, long, java.util.concurrent.TimeUnit) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException, java.util.concurrent.TimeoutException;
     method public abstract boolean isShutdown();
     method public abstract boolean isTerminated();
     method public abstract void shutdown();
     method public abstract java.util.List<java.lang.Runnable> shutdownNow();
-    method public abstract java.util.concurrent.Future<T> submit(java.util.concurrent.Callable<T>);
-    method public abstract java.util.concurrent.Future<T> submit(java.lang.Runnable, T);
+    method public abstract <T> java.util.concurrent.Future<T> submit(java.util.concurrent.Callable<T>);
+    method public abstract <T> java.util.concurrent.Future<T> submit(java.lang.Runnable, T);
     method public abstract java.util.concurrent.Future<?> submit(java.lang.Runnable);
   }
 
   public class Executors {
-    method public static java.util.concurrent.Callable<T> callable(java.lang.Runnable, T);
+    method public static <T> java.util.concurrent.Callable<T> callable(java.lang.Runnable, T);
     method public static java.util.concurrent.Callable<java.lang.Object> callable(java.lang.Runnable);
     method public static java.util.concurrent.Callable<java.lang.Object> callable(java.security.PrivilegedAction<?>);
     method public static java.util.concurrent.Callable<java.lang.Object> callable(java.security.PrivilegedExceptionAction<?>);
@@ -63022,8 +63027,8 @@
     method public static java.util.concurrent.ScheduledExecutorService newSingleThreadScheduledExecutor(java.util.concurrent.ThreadFactory);
     method public static java.util.concurrent.ExecutorService newWorkStealingPool(int);
     method public static java.util.concurrent.ExecutorService newWorkStealingPool();
-    method public static java.util.concurrent.Callable<T> privilegedCallable(java.util.concurrent.Callable<T>);
-    method public static java.util.concurrent.Callable<T> privilegedCallableUsingCurrentClassLoader(java.util.concurrent.Callable<T>);
+    method public static <T> java.util.concurrent.Callable<T> privilegedCallable(java.util.concurrent.Callable<T>);
+    method public static <T> java.util.concurrent.Callable<T> privilegedCallableUsingCurrentClassLoader(java.util.concurrent.Callable<T>);
     method public static java.util.concurrent.ThreadFactory privilegedThreadFactory();
     method public static java.util.concurrent.ExecutorService unconfigurableExecutorService(java.util.concurrent.ExecutorService);
     method public static java.util.concurrent.ScheduledExecutorService unconfigurableScheduledExecutorService(java.util.concurrent.ScheduledExecutorService);
@@ -63051,7 +63056,7 @@
     method public long getStealCount();
     method public java.lang.Thread.UncaughtExceptionHandler getUncaughtExceptionHandler();
     method public boolean hasQueuedSubmissions();
-    method public T invoke(java.util.concurrent.ForkJoinTask<T>);
+    method public <T> T invoke(java.util.concurrent.ForkJoinTask<T>);
     method public boolean isQuiescent();
     method public boolean isShutdown();
     method public boolean isTerminated();
@@ -63060,7 +63065,7 @@
     method protected java.util.concurrent.ForkJoinTask<?> pollSubmission();
     method public void shutdown();
     method public java.util.List<java.lang.Runnable> shutdownNow();
-    method public java.util.concurrent.ForkJoinTask<T> submit(java.util.concurrent.ForkJoinTask<T>);
+    method public <T> java.util.concurrent.ForkJoinTask<T> submit(java.util.concurrent.ForkJoinTask<T>);
     field public static final java.util.concurrent.ForkJoinPool.ForkJoinWorkerThreadFactory defaultForkJoinWorkerThreadFactory;
   }
 
@@ -63073,11 +63078,11 @@
     method public abstract boolean isReleasable();
   }
 
-  public abstract class ForkJoinTask implements java.util.concurrent.Future java.io.Serializable {
+  public abstract class ForkJoinTask<V> implements java.util.concurrent.Future java.io.Serializable {
     ctor public ForkJoinTask();
     method public static java.util.concurrent.ForkJoinTask<?> adapt(java.lang.Runnable);
-    method public static java.util.concurrent.ForkJoinTask<T> adapt(java.lang.Runnable, T);
-    method public static java.util.concurrent.ForkJoinTask<T> adapt(java.util.concurrent.Callable<? extends T>);
+    method public static <T> java.util.concurrent.ForkJoinTask<T> adapt(java.lang.Runnable, T);
+    method public static <T> java.util.concurrent.ForkJoinTask<T> adapt(java.util.concurrent.Callable<? extends T>);
     method public boolean cancel(boolean);
     method public final boolean compareAndSetForkJoinTaskTag(short, short);
     method public void complete(V);
@@ -63097,7 +63102,7 @@
     method public final V invoke();
     method public static void invokeAll(java.util.concurrent.ForkJoinTask<?>, java.util.concurrent.ForkJoinTask<?>);
     method public static void invokeAll(java.util.concurrent.ForkJoinTask<?>...);
-    method public static java.util.Collection<T> invokeAll(java.util.Collection<T>);
+    method public static <T extends java.util.concurrent.ForkJoinTask<?>> java.util.Collection<T> invokeAll(java.util.Collection<T>);
     method public final boolean isCancelled();
     method public final boolean isCompletedAbnormally();
     method public final boolean isCompletedNormally();
@@ -63123,7 +63128,7 @@
     method protected void onTermination(java.lang.Throwable);
   }
 
-  public abstract interface Future {
+  public abstract interface Future<V> {
     method public abstract boolean cancel(boolean);
     method public abstract V get() throws java.util.concurrent.ExecutionException, java.lang.InterruptedException;
     method public abstract V get(long, java.util.concurrent.TimeUnit) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException, java.util.concurrent.TimeoutException;
@@ -63131,7 +63136,7 @@
     method public abstract boolean isDone();
   }
 
-  public class FutureTask implements java.util.concurrent.RunnableFuture {
+  public class FutureTask<V> implements java.util.concurrent.RunnableFuture {
     ctor public FutureTask(java.util.concurrent.Callable<V>);
     ctor public FutureTask(java.lang.Runnable, V);
     method public boolean cancel(boolean);
@@ -63146,7 +63151,7 @@
     method protected void setException(java.lang.Throwable);
   }
 
-  public class LinkedBlockingDeque extends java.util.AbstractQueue implements java.util.concurrent.BlockingDeque java.io.Serializable {
+  public class LinkedBlockingDeque<E> extends java.util.AbstractQueue implements java.util.concurrent.BlockingDeque java.io.Serializable {
     ctor public LinkedBlockingDeque();
     ctor public LinkedBlockingDeque(int);
     ctor public LinkedBlockingDeque(java.util.Collection<? extends E>);
@@ -63190,7 +63195,7 @@
     method public E takeLast() throws java.lang.InterruptedException;
   }
 
-  public class LinkedBlockingQueue extends java.util.AbstractQueue implements java.util.concurrent.BlockingQueue java.io.Serializable {
+  public class LinkedBlockingQueue<E> extends java.util.AbstractQueue implements java.util.concurrent.BlockingQueue java.io.Serializable {
     ctor public LinkedBlockingQueue();
     ctor public LinkedBlockingQueue(int);
     ctor public LinkedBlockingQueue(java.util.Collection<? extends E>);
@@ -63209,7 +63214,7 @@
     method public E take() throws java.lang.InterruptedException;
   }
 
-  public class LinkedTransferQueue extends java.util.AbstractQueue implements java.io.Serializable java.util.concurrent.TransferQueue {
+  public class LinkedTransferQueue<E> extends java.util.AbstractQueue implements java.io.Serializable java.util.concurrent.TransferQueue {
     ctor public LinkedTransferQueue();
     ctor public LinkedTransferQueue(java.util.Collection<? extends E>);
     method public int drainTo(java.util.Collection<? super E>);
@@ -63256,7 +63261,7 @@
     method public int register();
   }
 
-  public class PriorityBlockingQueue extends java.util.AbstractQueue implements java.util.concurrent.BlockingQueue java.io.Serializable {
+  public class PriorityBlockingQueue<E> extends java.util.AbstractQueue implements java.util.concurrent.BlockingQueue java.io.Serializable {
     ctor public PriorityBlockingQueue();
     ctor public PriorityBlockingQueue(int);
     ctor public PriorityBlockingQueue(int, java.util.Comparator<? super E>);
@@ -63285,7 +63290,7 @@
     method protected final void setRawResult(java.lang.Void);
   }
 
-  public abstract class RecursiveTask extends java.util.concurrent.ForkJoinTask {
+  public abstract class RecursiveTask<V> extends java.util.concurrent.ForkJoinTask {
     ctor public RecursiveTask();
     method protected abstract V compute();
     method protected final boolean exec();
@@ -63304,22 +63309,22 @@
     method public abstract void rejectedExecution(java.lang.Runnable, java.util.concurrent.ThreadPoolExecutor);
   }
 
-  public abstract interface RunnableFuture implements java.util.concurrent.Future java.lang.Runnable {
+  public abstract interface RunnableFuture<V> implements java.util.concurrent.Future java.lang.Runnable {
     method public abstract void run();
   }
 
-  public abstract interface RunnableScheduledFuture implements java.util.concurrent.RunnableFuture java.util.concurrent.ScheduledFuture {
+  public abstract interface RunnableScheduledFuture<V> implements java.util.concurrent.RunnableFuture java.util.concurrent.ScheduledFuture {
     method public abstract boolean isPeriodic();
   }
 
   public abstract interface ScheduledExecutorService implements java.util.concurrent.ExecutorService {
     method public abstract java.util.concurrent.ScheduledFuture<?> schedule(java.lang.Runnable, long, java.util.concurrent.TimeUnit);
-    method public abstract java.util.concurrent.ScheduledFuture<V> schedule(java.util.concurrent.Callable<V>, long, java.util.concurrent.TimeUnit);
+    method public abstract <V> java.util.concurrent.ScheduledFuture<V> schedule(java.util.concurrent.Callable<V>, long, java.util.concurrent.TimeUnit);
     method public abstract java.util.concurrent.ScheduledFuture<?> scheduleAtFixedRate(java.lang.Runnable, long, long, java.util.concurrent.TimeUnit);
     method public abstract java.util.concurrent.ScheduledFuture<?> scheduleWithFixedDelay(java.lang.Runnable, long, long, java.util.concurrent.TimeUnit);
   }
 
-  public abstract interface ScheduledFuture implements java.util.concurrent.Delayed java.util.concurrent.Future {
+  public abstract interface ScheduledFuture<V> implements java.util.concurrent.Delayed java.util.concurrent.Future {
   }
 
   public class ScheduledThreadPoolExecutor extends java.util.concurrent.ThreadPoolExecutor implements java.util.concurrent.ScheduledExecutorService {
@@ -63327,13 +63332,13 @@
     ctor public ScheduledThreadPoolExecutor(int, java.util.concurrent.ThreadFactory);
     ctor public ScheduledThreadPoolExecutor(int, java.util.concurrent.RejectedExecutionHandler);
     ctor public ScheduledThreadPoolExecutor(int, java.util.concurrent.ThreadFactory, java.util.concurrent.RejectedExecutionHandler);
-    method protected java.util.concurrent.RunnableScheduledFuture<V> decorateTask(java.lang.Runnable, java.util.concurrent.RunnableScheduledFuture<V>);
-    method protected java.util.concurrent.RunnableScheduledFuture<V> decorateTask(java.util.concurrent.Callable<V>, java.util.concurrent.RunnableScheduledFuture<V>);
+    method protected <V> java.util.concurrent.RunnableScheduledFuture<V> decorateTask(java.lang.Runnable, java.util.concurrent.RunnableScheduledFuture<V>);
+    method protected <V> java.util.concurrent.RunnableScheduledFuture<V> decorateTask(java.util.concurrent.Callable<V>, java.util.concurrent.RunnableScheduledFuture<V>);
     method public boolean getContinueExistingPeriodicTasksAfterShutdownPolicy();
     method public boolean getExecuteExistingDelayedTasksAfterShutdownPolicy();
     method public boolean getRemoveOnCancelPolicy();
     method public java.util.concurrent.ScheduledFuture<?> schedule(java.lang.Runnable, long, java.util.concurrent.TimeUnit);
-    method public java.util.concurrent.ScheduledFuture<V> schedule(java.util.concurrent.Callable<V>, long, java.util.concurrent.TimeUnit);
+    method public <V> java.util.concurrent.ScheduledFuture<V> schedule(java.util.concurrent.Callable<V>, long, java.util.concurrent.TimeUnit);
     method public java.util.concurrent.ScheduledFuture<?> scheduleAtFixedRate(java.lang.Runnable, long, long, java.util.concurrent.TimeUnit);
     method public java.util.concurrent.ScheduledFuture<?> scheduleWithFixedDelay(java.lang.Runnable, long, long, java.util.concurrent.TimeUnit);
     method public void setContinueExistingPeriodicTasksAfterShutdownPolicy(boolean);
@@ -63363,7 +63368,7 @@
     method public boolean tryAcquire(int, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
   }
 
-  public class SynchronousQueue extends java.util.AbstractQueue implements java.util.concurrent.BlockingQueue java.io.Serializable {
+  public class SynchronousQueue<E> extends java.util.AbstractQueue implements java.util.concurrent.BlockingQueue java.io.Serializable {
     ctor public SynchronousQueue();
     ctor public SynchronousQueue(boolean);
     method public int drainTo(java.util.Collection<? super E>);
@@ -63481,7 +63486,7 @@
     ctor public TimeoutException(java.lang.String);
   }
 
-  public abstract interface TransferQueue implements java.util.concurrent.BlockingQueue {
+  public abstract interface TransferQueue<E> implements java.util.concurrent.BlockingQueue {
     method public abstract int getWaitingConsumerCount();
     method public abstract boolean hasWaitingConsumer();
     method public abstract void transfer(E) throws java.lang.InterruptedException;
@@ -63551,7 +63556,7 @@
     method public final boolean weakCompareAndSet(int, int, int);
   }
 
-  public abstract class AtomicIntegerFieldUpdater {
+  public abstract class AtomicIntegerFieldUpdater<T> {
     ctor protected AtomicIntegerFieldUpdater();
     method public final int accumulateAndGet(T, int, java.util.function.IntBinaryOperator);
     method public int addAndGet(T, int);
@@ -63566,7 +63571,7 @@
     method public final int getAndUpdate(T, java.util.function.IntUnaryOperator);
     method public int incrementAndGet(T);
     method public abstract void lazySet(T, int);
-    method public static java.util.concurrent.atomic.AtomicIntegerFieldUpdater<U> newUpdater(java.lang.Class<U>, java.lang.String);
+    method public static <U> java.util.concurrent.atomic.AtomicIntegerFieldUpdater<U> newUpdater(java.lang.Class<U>, java.lang.String);
     method public abstract void set(T, int);
     method public final int updateAndGet(T, java.util.function.IntUnaryOperator);
     method public abstract boolean weakCompareAndSet(T, int, int);
@@ -63619,7 +63624,7 @@
     method public final boolean weakCompareAndSet(int, long, long);
   }
 
-  public abstract class AtomicLongFieldUpdater {
+  public abstract class AtomicLongFieldUpdater<T> {
     ctor protected AtomicLongFieldUpdater();
     method public final long accumulateAndGet(T, long, java.util.function.LongBinaryOperator);
     method public long addAndGet(T, long);
@@ -63634,13 +63639,13 @@
     method public final long getAndUpdate(T, java.util.function.LongUnaryOperator);
     method public long incrementAndGet(T);
     method public abstract void lazySet(T, long);
-    method public static java.util.concurrent.atomic.AtomicLongFieldUpdater<U> newUpdater(java.lang.Class<U>, java.lang.String);
+    method public static <U> java.util.concurrent.atomic.AtomicLongFieldUpdater<U> newUpdater(java.lang.Class<U>, java.lang.String);
     method public abstract void set(T, long);
     method public final long updateAndGet(T, java.util.function.LongUnaryOperator);
     method public abstract boolean weakCompareAndSet(T, long, long);
   }
 
-  public class AtomicMarkableReference {
+  public class AtomicMarkableReference<V> {
     ctor public AtomicMarkableReference(V, boolean);
     method public boolean attemptMark(V, boolean);
     method public boolean compareAndSet(V, V, boolean, boolean);
@@ -63651,7 +63656,7 @@
     method public boolean weakCompareAndSet(V, V, boolean, boolean);
   }
 
-  public class AtomicReference implements java.io.Serializable {
+  public class AtomicReference<V> implements java.io.Serializable {
     ctor public AtomicReference(V);
     ctor public AtomicReference();
     method public final V accumulateAndGet(V, java.util.function.BinaryOperator<V>);
@@ -63666,7 +63671,7 @@
     method public final boolean weakCompareAndSet(V, V);
   }
 
-  public class AtomicReferenceArray implements java.io.Serializable {
+  public class AtomicReferenceArray<E> implements java.io.Serializable {
     ctor public AtomicReferenceArray(int);
     ctor public AtomicReferenceArray(E[]);
     method public final E accumulateAndGet(int, E, java.util.function.BinaryOperator<E>);
@@ -63682,7 +63687,7 @@
     method public final boolean weakCompareAndSet(int, E, E);
   }
 
-  public abstract class AtomicReferenceFieldUpdater {
+  public abstract class AtomicReferenceFieldUpdater<T, V> {
     ctor protected AtomicReferenceFieldUpdater();
     method public final V accumulateAndGet(T, V, java.util.function.BinaryOperator<V>);
     method public abstract boolean compareAndSet(T, V, V);
@@ -63691,13 +63696,13 @@
     method public V getAndSet(T, V);
     method public final V getAndUpdate(T, java.util.function.UnaryOperator<V>);
     method public abstract void lazySet(T, V);
-    method public static java.util.concurrent.atomic.AtomicReferenceFieldUpdater<U, W> newUpdater(java.lang.Class<U>, java.lang.Class<W>, java.lang.String);
+    method public static <U, W> java.util.concurrent.atomic.AtomicReferenceFieldUpdater<U, W> newUpdater(java.lang.Class<U>, java.lang.Class<W>, java.lang.String);
     method public abstract void set(T, V);
     method public final V updateAndGet(T, java.util.function.UnaryOperator<V>);
     method public abstract boolean weakCompareAndSet(T, V, V);
   }
 
-  public class AtomicStampedReference {
+  public class AtomicStampedReference<V> {
     ctor public AtomicStampedReference(V, int);
     method public boolean attemptStamp(V, int);
     method public boolean compareAndSet(V, V, int, int);
@@ -64000,33 +64005,33 @@
 
 package java.util.function {
 
-  public abstract interface BiConsumer {
+  public abstract interface BiConsumer<T, U> {
     method public abstract void accept(T, U);
     method public default java.util.function.BiConsumer<T, U> andThen(java.util.function.BiConsumer<? super T, ? super U>);
   }
 
-  public abstract interface BiFunction {
-    method public default java.util.function.BiFunction<T, U, V> andThen(java.util.function.Function<? super R, ? extends V>);
+  public abstract interface BiFunction<T, U, R> {
+    method public default <V> java.util.function.BiFunction<T, U, V> andThen(java.util.function.Function<? super R, ? extends V>);
     method public abstract R apply(T, U);
   }
 
-  public abstract interface BiPredicate {
+  public abstract interface BiPredicate<T, U> {
     method public default java.util.function.BiPredicate<T, U> and(java.util.function.BiPredicate<? super T, ? super U>);
     method public default java.util.function.BiPredicate<T, U> negate();
     method public default java.util.function.BiPredicate<T, U> or(java.util.function.BiPredicate<? super T, ? super U>);
     method public abstract boolean test(T, U);
   }
 
-  public abstract interface BinaryOperator implements java.util.function.BiFunction {
-    method public static java.util.function.BinaryOperator<T> maxBy(java.util.Comparator<? super T>);
-    method public static java.util.function.BinaryOperator<T> minBy(java.util.Comparator<? super T>);
+  public abstract interface BinaryOperator<T> implements java.util.function.BiFunction {
+    method public static <T> java.util.function.BinaryOperator<T> maxBy(java.util.Comparator<? super T>);
+    method public static <T> java.util.function.BinaryOperator<T> minBy(java.util.Comparator<? super T>);
   }
 
   public abstract interface BooleanSupplier {
     method public abstract boolean getAsBoolean();
   }
 
-  public abstract interface Consumer {
+  public abstract interface Consumer<T> {
     method public abstract void accept(T);
     method public default java.util.function.Consumer<T> andThen(java.util.function.Consumer<? super T>);
   }
@@ -64040,7 +64045,7 @@
     method public default java.util.function.DoubleConsumer andThen(java.util.function.DoubleConsumer);
   }
 
-  public abstract interface DoubleFunction {
+  public abstract interface DoubleFunction<R> {
     method public abstract R apply(double);
   }
 
@@ -64070,11 +64075,11 @@
     method public static java.util.function.DoubleUnaryOperator identity();
   }
 
-  public abstract interface Function {
-    method public default java.util.function.Function<T, V> andThen(java.util.function.Function<? super R, ? extends V>);
+  public abstract interface Function<T, R> {
+    method public default <V> java.util.function.Function<T, V> andThen(java.util.function.Function<? super R, ? extends V>);
     method public abstract R apply(T);
-    method public default java.util.function.Function<V, R> compose(java.util.function.Function<? super V, ? extends T>);
-    method public static java.util.function.Function<T, T> identity();
+    method public default <V> java.util.function.Function<V, R> compose(java.util.function.Function<? super V, ? extends T>);
+    method public static <T> java.util.function.Function<T, T> identity();
   }
 
   public abstract interface IntBinaryOperator {
@@ -64086,7 +64091,7 @@
     method public default java.util.function.IntConsumer andThen(java.util.function.IntConsumer);
   }
 
-  public abstract interface IntFunction {
+  public abstract interface IntFunction<R> {
     method public abstract R apply(int);
   }
 
@@ -64125,7 +64130,7 @@
     method public default java.util.function.LongConsumer andThen(java.util.function.LongConsumer);
   }
 
-  public abstract interface LongFunction {
+  public abstract interface LongFunction<R> {
     method public abstract R apply(long);
   }
 
@@ -64155,56 +64160,56 @@
     method public static java.util.function.LongUnaryOperator identity();
   }
 
-  public abstract interface ObjDoubleConsumer {
+  public abstract interface ObjDoubleConsumer<T> {
     method public abstract void accept(T, double);
   }
 
-  public abstract interface ObjIntConsumer {
+  public abstract interface ObjIntConsumer<T> {
     method public abstract void accept(T, int);
   }
 
-  public abstract interface ObjLongConsumer {
+  public abstract interface ObjLongConsumer<T> {
     method public abstract void accept(T, long);
   }
 
-  public abstract interface Predicate {
+  public abstract interface Predicate<T> {
     method public default java.util.function.Predicate<T> and(java.util.function.Predicate<? super T>);
-    method public static java.util.function.Predicate<T> isEqual(java.lang.Object);
+    method public static <T> java.util.function.Predicate<T> isEqual(java.lang.Object);
     method public default java.util.function.Predicate<T> negate();
     method public default java.util.function.Predicate<T> or(java.util.function.Predicate<? super T>);
     method public abstract boolean test(T);
   }
 
-  public abstract interface Supplier {
+  public abstract interface Supplier<T> {
     method public abstract T get();
   }
 
-  public abstract interface ToDoubleBiFunction {
+  public abstract interface ToDoubleBiFunction<T, U> {
     method public abstract double applyAsDouble(T, U);
   }
 
-  public abstract interface ToDoubleFunction {
+  public abstract interface ToDoubleFunction<T> {
     method public abstract double applyAsDouble(T);
   }
 
-  public abstract interface ToIntBiFunction {
+  public abstract interface ToIntBiFunction<T, U> {
     method public abstract int applyAsInt(T, U);
   }
 
-  public abstract interface ToIntFunction {
+  public abstract interface ToIntFunction<T> {
     method public abstract int applyAsInt(T);
   }
 
-  public abstract interface ToLongBiFunction {
+  public abstract interface ToLongBiFunction<T, U> {
     method public abstract long applyAsLong(T, U);
   }
 
-  public abstract interface ToLongFunction {
+  public abstract interface ToLongFunction<T> {
     method public abstract long applyAsLong(T);
   }
 
-  public abstract interface UnaryOperator implements java.util.function.Function {
-    method public static java.util.function.UnaryOperator<T> identity();
+  public abstract interface UnaryOperator<T> implements java.util.function.Function {
+    method public static <T> java.util.function.UnaryOperator<T> identity();
   }
 
 }
@@ -64792,7 +64797,7 @@
 
 package java.util.stream {
 
-  public abstract interface BaseStream implements java.lang.AutoCloseable {
+  public abstract interface BaseStream<T, S extends java.util.stream.BaseStream<T, S>> implements java.lang.AutoCloseable {
     method public abstract void close();
     method public abstract boolean isParallel();
     method public abstract java.util.Iterator<T> iterator();
@@ -64803,13 +64808,13 @@
     method public abstract S unordered();
   }
 
-  public abstract interface Collector {
+  public abstract interface Collector<T, A, R> {
     method public abstract java.util.function.BiConsumer<A, T> accumulator();
     method public abstract java.util.Set<java.util.stream.Collector.Characteristics> characteristics();
     method public abstract java.util.function.BinaryOperator<A> combiner();
     method public abstract java.util.function.Function<A, R> finisher();
-    method public static java.util.stream.Collector<T, R, R> of(java.util.function.Supplier<R>, java.util.function.BiConsumer<R, T>, java.util.function.BinaryOperator<R>, java.util.stream.Collector.Characteristics...);
-    method public static java.util.stream.Collector<T, A, R> of(java.util.function.Supplier<A>, java.util.function.BiConsumer<A, T>, java.util.function.BinaryOperator<A>, java.util.function.Function<A, R>, java.util.stream.Collector.Characteristics...);
+    method public static <T, R> java.util.stream.Collector<T, R, R> of(java.util.function.Supplier<R>, java.util.function.BiConsumer<R, T>, java.util.function.BinaryOperator<R>, java.util.stream.Collector.Characteristics...);
+    method public static <T, A, R> java.util.stream.Collector<T, A, R> of(java.util.function.Supplier<A>, java.util.function.BiConsumer<A, T>, java.util.function.BinaryOperator<A>, java.util.function.Function<A, R>, java.util.stream.Collector.Characteristics...);
     method public abstract java.util.function.Supplier<A> supplier();
   }
 
@@ -64822,43 +64827,43 @@
   }
 
   public final class Collectors {
-    method public static java.util.stream.Collector<T, ?, java.lang.Double> averagingDouble(java.util.function.ToDoubleFunction<? super T>);
-    method public static java.util.stream.Collector<T, ?, java.lang.Double> averagingInt(java.util.function.ToIntFunction<? super T>);
-    method public static java.util.stream.Collector<T, ?, java.lang.Double> averagingLong(java.util.function.ToLongFunction<? super T>);
-    method public static java.util.stream.Collector<T, A, RR> collectingAndThen(java.util.stream.Collector<T, A, R>, java.util.function.Function<R, RR>);
-    method public static java.util.stream.Collector<T, ?, java.lang.Long> counting();
-    method public static java.util.stream.Collector<T, ?, java.util.Map<K, java.util.List<T>>> groupingBy(java.util.function.Function<? super T, ? extends K>);
-    method public static java.util.stream.Collector<T, ?, java.util.Map<K, D>> groupingBy(java.util.function.Function<? super T, ? extends K>, java.util.stream.Collector<? super T, A, D>);
-    method public static java.util.stream.Collector<T, ?, M> groupingBy(java.util.function.Function<? super T, ? extends K>, java.util.function.Supplier<M>, java.util.stream.Collector<? super T, A, D>);
-    method public static java.util.stream.Collector<T, ?, java.util.concurrent.ConcurrentMap<K, java.util.List<T>>> groupingByConcurrent(java.util.function.Function<? super T, ? extends K>);
-    method public static java.util.stream.Collector<T, ?, java.util.concurrent.ConcurrentMap<K, D>> groupingByConcurrent(java.util.function.Function<? super T, ? extends K>, java.util.stream.Collector<? super T, A, D>);
-    method public static java.util.stream.Collector<T, ?, M> groupingByConcurrent(java.util.function.Function<? super T, ? extends K>, java.util.function.Supplier<M>, java.util.stream.Collector<? super T, A, D>);
+    method public static <T> java.util.stream.Collector<T, ?, java.lang.Double> averagingDouble(java.util.function.ToDoubleFunction<? super T>);
+    method public static <T> java.util.stream.Collector<T, ?, java.lang.Double> averagingInt(java.util.function.ToIntFunction<? super T>);
+    method public static <T> java.util.stream.Collector<T, ?, java.lang.Double> averagingLong(java.util.function.ToLongFunction<? super T>);
+    method public static <T, A, R, RR> java.util.stream.Collector<T, A, RR> collectingAndThen(java.util.stream.Collector<T, A, R>, java.util.function.Function<R, RR>);
+    method public static <T> java.util.stream.Collector<T, ?, java.lang.Long> counting();
+    method public static <T, K> java.util.stream.Collector<T, ?, java.util.Map<K, java.util.List<T>>> groupingBy(java.util.function.Function<? super T, ? extends K>);
+    method public static <T, K, A, D> java.util.stream.Collector<T, ?, java.util.Map<K, D>> groupingBy(java.util.function.Function<? super T, ? extends K>, java.util.stream.Collector<? super T, A, D>);
+    method public static <T, K, D, A, M extends java.util.Map<K, D>> java.util.stream.Collector<T, ?, M> groupingBy(java.util.function.Function<? super T, ? extends K>, java.util.function.Supplier<M>, java.util.stream.Collector<? super T, A, D>);
+    method public static <T, K> java.util.stream.Collector<T, ?, java.util.concurrent.ConcurrentMap<K, java.util.List<T>>> groupingByConcurrent(java.util.function.Function<? super T, ? extends K>);
+    method public static <T, K, A, D> java.util.stream.Collector<T, ?, java.util.concurrent.ConcurrentMap<K, D>> groupingByConcurrent(java.util.function.Function<? super T, ? extends K>, java.util.stream.Collector<? super T, A, D>);
+    method public static <T, K, A, D, M extends java.util.concurrent.ConcurrentMap<K, D>> java.util.stream.Collector<T, ?, M> groupingByConcurrent(java.util.function.Function<? super T, ? extends K>, java.util.function.Supplier<M>, java.util.stream.Collector<? super T, A, D>);
     method public static java.util.stream.Collector<java.lang.CharSequence, ?, java.lang.String> joining();
     method public static java.util.stream.Collector<java.lang.CharSequence, ?, java.lang.String> joining(java.lang.CharSequence);
     method public static java.util.stream.Collector<java.lang.CharSequence, ?, java.lang.String> joining(java.lang.CharSequence, java.lang.CharSequence, java.lang.CharSequence);
-    method public static java.util.stream.Collector<T, ?, R> mapping(java.util.function.Function<? super T, ? extends U>, java.util.stream.Collector<? super U, A, R>);
-    method public static java.util.stream.Collector<T, ?, java.util.Optional<T>> maxBy(java.util.Comparator<? super T>);
-    method public static java.util.stream.Collector<T, ?, java.util.Optional<T>> minBy(java.util.Comparator<? super T>);
-    method public static java.util.stream.Collector<T, ?, java.util.Map<java.lang.Boolean, java.util.List<T>>> partitioningBy(java.util.function.Predicate<? super T>);
-    method public static java.util.stream.Collector<T, ?, java.util.Map<java.lang.Boolean, D>> partitioningBy(java.util.function.Predicate<? super T>, java.util.stream.Collector<? super T, A, D>);
-    method public static java.util.stream.Collector<T, ?, T> reducing(T, java.util.function.BinaryOperator<T>);
-    method public static java.util.stream.Collector<T, ?, java.util.Optional<T>> reducing(java.util.function.BinaryOperator<T>);
-    method public static java.util.stream.Collector<T, ?, U> reducing(U, java.util.function.Function<? super T, ? extends U>, java.util.function.BinaryOperator<U>);
-    method public static java.util.stream.Collector<T, ?, java.util.DoubleSummaryStatistics> summarizingDouble(java.util.function.ToDoubleFunction<? super T>);
-    method public static java.util.stream.Collector<T, ?, java.util.IntSummaryStatistics> summarizingInt(java.util.function.ToIntFunction<? super T>);
-    method public static java.util.stream.Collector<T, ?, java.util.LongSummaryStatistics> summarizingLong(java.util.function.ToLongFunction<? super T>);
-    method public static java.util.stream.Collector<T, ?, java.lang.Double> summingDouble(java.util.function.ToDoubleFunction<? super T>);
-    method public static java.util.stream.Collector<T, ?, java.lang.Integer> summingInt(java.util.function.ToIntFunction<? super T>);
-    method public static java.util.stream.Collector<T, ?, java.lang.Long> summingLong(java.util.function.ToLongFunction<? super T>);
-    method public static java.util.stream.Collector<T, ?, C> toCollection(java.util.function.Supplier<C>);
-    method public static java.util.stream.Collector<T, ?, java.util.concurrent.ConcurrentMap<K, U>> toConcurrentMap(java.util.function.Function<? super T, ? extends K>, java.util.function.Function<? super T, ? extends U>);
-    method public static java.util.stream.Collector<T, ?, java.util.concurrent.ConcurrentMap<K, U>> toConcurrentMap(java.util.function.Function<? super T, ? extends K>, java.util.function.Function<? super T, ? extends U>, java.util.function.BinaryOperator<U>);
-    method public static java.util.stream.Collector<T, ?, M> toConcurrentMap(java.util.function.Function<? super T, ? extends K>, java.util.function.Function<? super T, ? extends U>, java.util.function.BinaryOperator<U>, java.util.function.Supplier<M>);
-    method public static java.util.stream.Collector<T, ?, java.util.List<T>> toList();
-    method public static java.util.stream.Collector<T, ?, java.util.Map<K, U>> toMap(java.util.function.Function<? super T, ? extends K>, java.util.function.Function<? super T, ? extends U>);
-    method public static java.util.stream.Collector<T, ?, java.util.Map<K, U>> toMap(java.util.function.Function<? super T, ? extends K>, java.util.function.Function<? super T, ? extends U>, java.util.function.BinaryOperator<U>);
-    method public static java.util.stream.Collector<T, ?, M> toMap(java.util.function.Function<? super T, ? extends K>, java.util.function.Function<? super T, ? extends U>, java.util.function.BinaryOperator<U>, java.util.function.Supplier<M>);
-    method public static java.util.stream.Collector<T, ?, java.util.Set<T>> toSet();
+    method public static <T, U, A, R> java.util.stream.Collector<T, ?, R> mapping(java.util.function.Function<? super T, ? extends U>, java.util.stream.Collector<? super U, A, R>);
+    method public static <T> java.util.stream.Collector<T, ?, java.util.Optional<T>> maxBy(java.util.Comparator<? super T>);
+    method public static <T> java.util.stream.Collector<T, ?, java.util.Optional<T>> minBy(java.util.Comparator<? super T>);
+    method public static <T> java.util.stream.Collector<T, ?, java.util.Map<java.lang.Boolean, java.util.List<T>>> partitioningBy(java.util.function.Predicate<? super T>);
+    method public static <T, D, A> java.util.stream.Collector<T, ?, java.util.Map<java.lang.Boolean, D>> partitioningBy(java.util.function.Predicate<? super T>, java.util.stream.Collector<? super T, A, D>);
+    method public static <T> java.util.stream.Collector<T, ?, T> reducing(T, java.util.function.BinaryOperator<T>);
+    method public static <T> java.util.stream.Collector<T, ?, java.util.Optional<T>> reducing(java.util.function.BinaryOperator<T>);
+    method public static <T, U> java.util.stream.Collector<T, ?, U> reducing(U, java.util.function.Function<? super T, ? extends U>, java.util.function.BinaryOperator<U>);
+    method public static <T> java.util.stream.Collector<T, ?, java.util.DoubleSummaryStatistics> summarizingDouble(java.util.function.ToDoubleFunction<? super T>);
+    method public static <T> java.util.stream.Collector<T, ?, java.util.IntSummaryStatistics> summarizingInt(java.util.function.ToIntFunction<? super T>);
+    method public static <T> java.util.stream.Collector<T, ?, java.util.LongSummaryStatistics> summarizingLong(java.util.function.ToLongFunction<? super T>);
+    method public static <T> java.util.stream.Collector<T, ?, java.lang.Double> summingDouble(java.util.function.ToDoubleFunction<? super T>);
+    method public static <T> java.util.stream.Collector<T, ?, java.lang.Integer> summingInt(java.util.function.ToIntFunction<? super T>);
+    method public static <T> java.util.stream.Collector<T, ?, java.lang.Long> summingLong(java.util.function.ToLongFunction<? super T>);
+    method public static <T, C extends java.util.Collection<T>> java.util.stream.Collector<T, ?, C> toCollection(java.util.function.Supplier<C>);
+    method public static <T, K, U> java.util.stream.Collector<T, ?, java.util.concurrent.ConcurrentMap<K, U>> toConcurrentMap(java.util.function.Function<? super T, ? extends K>, java.util.function.Function<? super T, ? extends U>);
+    method public static <T, K, U> java.util.stream.Collector<T, ?, java.util.concurrent.ConcurrentMap<K, U>> toConcurrentMap(java.util.function.Function<? super T, ? extends K>, java.util.function.Function<? super T, ? extends U>, java.util.function.BinaryOperator<U>);
+    method public static <T, K, U, M extends java.util.concurrent.ConcurrentMap<K, U>> java.util.stream.Collector<T, ?, M> toConcurrentMap(java.util.function.Function<? super T, ? extends K>, java.util.function.Function<? super T, ? extends U>, java.util.function.BinaryOperator<U>, java.util.function.Supplier<M>);
+    method public static <T> java.util.stream.Collector<T, ?, java.util.List<T>> toList();
+    method public static <T, K, U> java.util.stream.Collector<T, ?, java.util.Map<K, U>> toMap(java.util.function.Function<? super T, ? extends K>, java.util.function.Function<? super T, ? extends U>);
+    method public static <T, K, U> java.util.stream.Collector<T, ?, java.util.Map<K, U>> toMap(java.util.function.Function<? super T, ? extends K>, java.util.function.Function<? super T, ? extends U>, java.util.function.BinaryOperator<U>);
+    method public static <T, K, U, M extends java.util.Map<K, U>> java.util.stream.Collector<T, ?, M> toMap(java.util.function.Function<? super T, ? extends K>, java.util.function.Function<? super T, ? extends U>, java.util.function.BinaryOperator<U>, java.util.function.Supplier<M>);
+    method public static <T> java.util.stream.Collector<T, ?, java.util.Set<T>> toSet();
   }
 
   public abstract interface DoubleStream implements java.util.stream.BaseStream {
@@ -64867,7 +64872,7 @@
     method public abstract java.util.OptionalDouble average();
     method public abstract java.util.stream.Stream<java.lang.Double> boxed();
     method public static java.util.stream.DoubleStream.Builder builder();
-    method public abstract R collect(java.util.function.Supplier<R>, java.util.function.ObjDoubleConsumer<R>, java.util.function.BiConsumer<R, R>);
+    method public abstract <R> R collect(java.util.function.Supplier<R>, java.util.function.ObjDoubleConsumer<R>, java.util.function.BiConsumer<R, R>);
     method public static java.util.stream.DoubleStream concat(java.util.stream.DoubleStream, java.util.stream.DoubleStream);
     method public abstract long count();
     method public abstract java.util.stream.DoubleStream distinct();
@@ -64885,7 +64890,7 @@
     method public abstract java.util.stream.DoubleStream map(java.util.function.DoubleUnaryOperator);
     method public abstract java.util.stream.IntStream mapToInt(java.util.function.DoubleToIntFunction);
     method public abstract java.util.stream.LongStream mapToLong(java.util.function.DoubleToLongFunction);
-    method public abstract java.util.stream.Stream<U> mapToObj(java.util.function.DoubleFunction<? extends U>);
+    method public abstract <U> java.util.stream.Stream<U> mapToObj(java.util.function.DoubleFunction<? extends U>);
     method public abstract java.util.OptionalDouble max();
     method public abstract java.util.OptionalDouble min();
     method public abstract boolean noneMatch(java.util.function.DoublePredicate);
@@ -64918,7 +64923,7 @@
     method public abstract java.util.OptionalDouble average();
     method public abstract java.util.stream.Stream<java.lang.Integer> boxed();
     method public static java.util.stream.IntStream.Builder builder();
-    method public abstract R collect(java.util.function.Supplier<R>, java.util.function.ObjIntConsumer<R>, java.util.function.BiConsumer<R, R>);
+    method public abstract <R> R collect(java.util.function.Supplier<R>, java.util.function.ObjIntConsumer<R>, java.util.function.BiConsumer<R, R>);
     method public static java.util.stream.IntStream concat(java.util.stream.IntStream, java.util.stream.IntStream);
     method public abstract long count();
     method public abstract java.util.stream.IntStream distinct();
@@ -64936,7 +64941,7 @@
     method public abstract java.util.stream.IntStream map(java.util.function.IntUnaryOperator);
     method public abstract java.util.stream.DoubleStream mapToDouble(java.util.function.IntToDoubleFunction);
     method public abstract java.util.stream.LongStream mapToLong(java.util.function.IntToLongFunction);
-    method public abstract java.util.stream.Stream<U> mapToObj(java.util.function.IntFunction<? extends U>);
+    method public abstract <U> java.util.stream.Stream<U> mapToObj(java.util.function.IntFunction<? extends U>);
     method public abstract java.util.OptionalInt max();
     method public abstract java.util.OptionalInt min();
     method public abstract boolean noneMatch(java.util.function.IntPredicate);
@@ -64970,7 +64975,7 @@
     method public abstract java.util.OptionalDouble average();
     method public abstract java.util.stream.Stream<java.lang.Long> boxed();
     method public static java.util.stream.LongStream.Builder builder();
-    method public abstract R collect(java.util.function.Supplier<R>, java.util.function.ObjLongConsumer<R>, java.util.function.BiConsumer<R, R>);
+    method public abstract <R> R collect(java.util.function.Supplier<R>, java.util.function.ObjLongConsumer<R>, java.util.function.BiConsumer<R, R>);
     method public static java.util.stream.LongStream concat(java.util.stream.LongStream, java.util.stream.LongStream);
     method public abstract long count();
     method public abstract java.util.stream.LongStream distinct();
@@ -64988,7 +64993,7 @@
     method public abstract java.util.stream.LongStream map(java.util.function.LongUnaryOperator);
     method public abstract java.util.stream.DoubleStream mapToDouble(java.util.function.LongToDoubleFunction);
     method public abstract java.util.stream.IntStream mapToInt(java.util.function.LongToIntFunction);
-    method public abstract java.util.stream.Stream<U> mapToObj(java.util.function.LongFunction<? extends U>);
+    method public abstract <U> java.util.stream.Stream<U> mapToObj(java.util.function.LongFunction<? extends U>);
     method public abstract java.util.OptionalLong max();
     method public abstract java.util.OptionalLong min();
     method public abstract boolean noneMatch(java.util.function.LongPredicate);
@@ -65015,49 +65020,49 @@
     method public abstract java.util.stream.LongStream build();
   }
 
-  public abstract interface Stream implements java.util.stream.BaseStream {
+  public abstract interface Stream<T> implements java.util.stream.BaseStream {
     method public abstract boolean allMatch(java.util.function.Predicate<? super T>);
     method public abstract boolean anyMatch(java.util.function.Predicate<? super T>);
-    method public static java.util.stream.Stream.Builder<T> builder();
-    method public abstract R collect(java.util.function.Supplier<R>, java.util.function.BiConsumer<R, ? super T>, java.util.function.BiConsumer<R, R>);
-    method public abstract R collect(java.util.stream.Collector<? super T, A, R>);
-    method public static java.util.stream.Stream<T> concat(java.util.stream.Stream<? extends T>, java.util.stream.Stream<? extends T>);
+    method public static <T> java.util.stream.Stream.Builder<T> builder();
+    method public abstract <R> R collect(java.util.function.Supplier<R>, java.util.function.BiConsumer<R, ? super T>, java.util.function.BiConsumer<R, R>);
+    method public abstract <R, A> R collect(java.util.stream.Collector<? super T, A, R>);
+    method public static <T> java.util.stream.Stream<T> concat(java.util.stream.Stream<? extends T>, java.util.stream.Stream<? extends T>);
     method public abstract long count();
     method public abstract java.util.stream.Stream<T> distinct();
-    method public static java.util.stream.Stream<T> empty();
+    method public static <T> java.util.stream.Stream<T> empty();
     method public abstract java.util.stream.Stream<T> filter(java.util.function.Predicate<? super T>);
     method public abstract java.util.Optional<T> findAny();
     method public abstract java.util.Optional<T> findFirst();
-    method public abstract java.util.stream.Stream<R> flatMap(java.util.function.Function<? super T, ? extends java.util.stream.Stream<? extends R>>);
+    method public abstract <R> java.util.stream.Stream<R> flatMap(java.util.function.Function<? super T, ? extends java.util.stream.Stream<? extends R>>);
     method public abstract java.util.stream.DoubleStream flatMapToDouble(java.util.function.Function<? super T, ? extends java.util.stream.DoubleStream>);
     method public abstract java.util.stream.IntStream flatMapToInt(java.util.function.Function<? super T, ? extends java.util.stream.IntStream>);
     method public abstract java.util.stream.LongStream flatMapToLong(java.util.function.Function<? super T, ? extends java.util.stream.LongStream>);
     method public abstract void forEach(java.util.function.Consumer<? super T>);
     method public abstract void forEachOrdered(java.util.function.Consumer<? super T>);
-    method public static java.util.stream.Stream<T> generate(java.util.function.Supplier<T>);
-    method public static java.util.stream.Stream<T> iterate(T, java.util.function.UnaryOperator<T>);
+    method public static <T> java.util.stream.Stream<T> generate(java.util.function.Supplier<T>);
+    method public static <T> java.util.stream.Stream<T> iterate(T, java.util.function.UnaryOperator<T>);
     method public abstract java.util.stream.Stream<T> limit(long);
-    method public abstract java.util.stream.Stream<R> map(java.util.function.Function<? super T, ? extends R>);
+    method public abstract <R> java.util.stream.Stream<R> map(java.util.function.Function<? super T, ? extends R>);
     method public abstract java.util.stream.DoubleStream mapToDouble(java.util.function.ToDoubleFunction<? super T>);
     method public abstract java.util.stream.IntStream mapToInt(java.util.function.ToIntFunction<? super T>);
     method public abstract java.util.stream.LongStream mapToLong(java.util.function.ToLongFunction<? super T>);
     method public abstract java.util.Optional<T> max(java.util.Comparator<? super T>);
     method public abstract java.util.Optional<T> min(java.util.Comparator<? super T>);
     method public abstract boolean noneMatch(java.util.function.Predicate<? super T>);
-    method public static java.util.stream.Stream<T> of(T);
-    method public static java.util.stream.Stream<T> of(T...);
+    method public static <T> java.util.stream.Stream<T> of(T);
+    method public static <T> java.util.stream.Stream<T> of(T...);
     method public abstract java.util.stream.Stream<T> peek(java.util.function.Consumer<? super T>);
     method public abstract T reduce(T, java.util.function.BinaryOperator<T>);
     method public abstract java.util.Optional<T> reduce(java.util.function.BinaryOperator<T>);
-    method public abstract U reduce(U, java.util.function.BiFunction<U, ? super T, U>, java.util.function.BinaryOperator<U>);
+    method public abstract <U> U reduce(U, java.util.function.BiFunction<U, ? super T, U>, java.util.function.BinaryOperator<U>);
     method public abstract java.util.stream.Stream<T> skip(long);
     method public abstract java.util.stream.Stream<T> sorted();
     method public abstract java.util.stream.Stream<T> sorted(java.util.Comparator<? super T>);
     method public abstract java.lang.Object[] toArray();
-    method public abstract A[] toArray(java.util.function.IntFunction<A[]>);
+    method public abstract <A> A[] toArray(java.util.function.IntFunction<A[]>);
   }
 
-  public static abstract interface Stream.Builder implements java.util.function.Consumer {
+  public static abstract interface Stream.Builder<T> implements java.util.function.Consumer {
     method public abstract void accept(T);
     method public default java.util.stream.Stream.Builder<T> add(T);
     method public abstract java.util.stream.Stream<T> build();
@@ -65070,8 +65075,8 @@
     method public static java.util.stream.IntStream intStream(java.util.function.Supplier<? extends java.util.Spliterator.OfInt>, int, boolean);
     method public static java.util.stream.LongStream longStream(java.util.Spliterator.OfLong, boolean);
     method public static java.util.stream.LongStream longStream(java.util.function.Supplier<? extends java.util.Spliterator.OfLong>, int, boolean);
-    method public static java.util.stream.Stream<T> stream(java.util.Spliterator<T>, boolean);
-    method public static java.util.stream.Stream<T> stream(java.util.function.Supplier<? extends java.util.Spliterator<T>>, int, boolean);
+    method public static <T> java.util.stream.Stream<T> stream(java.util.Spliterator<T>, boolean);
+    method public static <T> java.util.stream.Stream<T> stream(java.util.function.Supplier<? extends java.util.Spliterator<T>>, int, boolean);
   }
 
 }
@@ -67242,16 +67247,16 @@
   public final class Subject implements java.io.Serializable {
     ctor public Subject();
     ctor public Subject(boolean, java.util.Set<? extends java.security.Principal>, java.util.Set<?>, java.util.Set<?>);
-    method public static T doAs(javax.security.auth.Subject, java.security.PrivilegedAction<T>);
-    method public static T doAs(javax.security.auth.Subject, java.security.PrivilegedExceptionAction<T>) throws java.security.PrivilegedActionException;
-    method public static T doAsPrivileged(javax.security.auth.Subject, java.security.PrivilegedAction<T>, java.security.AccessControlContext);
-    method public static T doAsPrivileged(javax.security.auth.Subject, java.security.PrivilegedExceptionAction<T>, java.security.AccessControlContext) throws java.security.PrivilegedActionException;
+    method public static <T> T doAs(javax.security.auth.Subject, java.security.PrivilegedAction<T>);
+    method public static <T> T doAs(javax.security.auth.Subject, java.security.PrivilegedExceptionAction<T>) throws java.security.PrivilegedActionException;
+    method public static <T> T doAsPrivileged(javax.security.auth.Subject, java.security.PrivilegedAction<T>, java.security.AccessControlContext);
+    method public static <T> T doAsPrivileged(javax.security.auth.Subject, java.security.PrivilegedExceptionAction<T>, java.security.AccessControlContext) throws java.security.PrivilegedActionException;
     method public java.util.Set<java.security.Principal> getPrincipals();
-    method public java.util.Set<T> getPrincipals(java.lang.Class<T>);
+    method public <T extends java.security.Principal> java.util.Set<T> getPrincipals(java.lang.Class<T>);
     method public java.util.Set<java.lang.Object> getPrivateCredentials();
-    method public java.util.Set<T> getPrivateCredentials(java.lang.Class<T>);
+    method public <T> java.util.Set<T> getPrivateCredentials(java.lang.Class<T>);
     method public java.util.Set<java.lang.Object> getPublicCredentials();
-    method public java.util.Set<T> getPublicCredentials(java.lang.Class<T>);
+    method public <T> java.util.Set<T> getPublicCredentials(java.lang.Class<T>);
     method public static javax.security.auth.Subject getSubject(java.security.AccessControlContext);
     method public boolean isReadOnly();
     method public void setReadOnly();