diff --git a/hamcrest-core/src/main/java/org/hamcrest/CoreMatchers.java b/hamcrest-core/src/main/java/org/hamcrest/CoreMatchers.java
index d690f7b..ada655a 100644
--- a/hamcrest-core/src/main/java/org/hamcrest/CoreMatchers.java
+++ b/hamcrest-core/src/main/java/org/hamcrest/CoreMatchers.java
@@ -9,7 +9,7 @@
    * <pre>assertThat("myValue", allOf(startsWith("my"), containsString("Val")))</pre>
    */
   public static <T> org.hamcrest.Matcher<T> allOf(java.lang.Iterable<org.hamcrest.Matcher<? super T>> matchers) {
-    return org.hamcrest.core.AllOf.allOf(matchers);
+    return org.hamcrest.core.AllOf.<T>allOf(matchers);
   }
 
   /**
@@ -19,7 +19,7 @@
    */
   @SafeVarargs
   public static <T> org.hamcrest.Matcher<T> allOf(org.hamcrest.Matcher<? super T>... matchers) {
-    return org.hamcrest.core.AllOf.allOf(matchers);
+    return org.hamcrest.core.AllOf.<T>allOf(matchers);
   }
 
 
@@ -29,7 +29,7 @@
    * <pre>assertThat("myValue", anyOf(startsWith("foo"), containsString("Val")))</pre>
    */
   public static <T> org.hamcrest.core.AnyOf<T> anyOf(java.lang.Iterable<org.hamcrest.Matcher<? super T>> matchers) {
-    return org.hamcrest.core.AnyOf.anyOf(matchers);
+    return org.hamcrest.core.AnyOf.<T>anyOf(matchers);
   }
 
   /**
@@ -39,7 +39,7 @@
    */
   @SafeVarargs
   public static <T> org.hamcrest.core.AnyOf<T> anyOf(org.hamcrest.Matcher<? super T>... matchers) {
-    return org.hamcrest.core.AnyOf.anyOf(matchers);
+    return org.hamcrest.core.AnyOf.<T>anyOf(matchers);
   }
 
   /**
@@ -155,7 +155,7 @@
    *     the matcher to apply to items provided by the examined {@link Iterable}
    */
   public static <T> org.hamcrest.Matcher<java.lang.Iterable<? super T>> hasItem(org.hamcrest.Matcher<? super T> itemMatcher) {
-    return org.hamcrest.core.IsCollectionContaining.hasItem(itemMatcher);
+    return org.hamcrest.core.IsCollectionContaining.<T>hasItem(itemMatcher);
   }
 
   /**
@@ -170,7 +170,7 @@
    *     the item to compare against the items provided by the examined {@link Iterable}
    */
   public static <T> org.hamcrest.Matcher<java.lang.Iterable<? super T>> hasItem(T item) {
-    return org.hamcrest.core.IsCollectionContaining.hasItem(item);
+    return org.hamcrest.core.IsCollectionContaining.<T>hasItem(item);
   }
 
   /**
@@ -186,7 +186,7 @@
    */
   @SafeVarargs
   public static <T> org.hamcrest.Matcher<java.lang.Iterable<T>> hasItems(org.hamcrest.Matcher<? super T>... itemMatchers) {
-    return org.hamcrest.core.IsCollectionContaining.hasItems(itemMatchers);
+    return org.hamcrest.core.IsCollectionContaining.<T>hasItems(itemMatchers);
   }
 
   /**
@@ -202,7 +202,7 @@
    */
   @SafeVarargs
   public static <T> org.hamcrest.Matcher<java.lang.Iterable<T>> hasItems(T... items) {
-    return org.hamcrest.core.IsCollectionContaining.hasItems(items);
+    return org.hamcrest.core.IsCollectionContaining.<T>hasItems(items);
   }
 
   /**
diff --git a/hamcrest-core/src/main/java/org/hamcrest/core/AllOf.java b/hamcrest-core/src/main/java/org/hamcrest/core/AllOf.java
index 06e999a..2cbe2e3 100644
--- a/hamcrest-core/src/main/java/org/hamcrest/core/AllOf.java
+++ b/hamcrest-core/src/main/java/org/hamcrest/core/AllOf.java
@@ -5,6 +5,7 @@
 import org.hamcrest.Matcher;
 
 import java.util.Arrays;
+import java.util.List;
 
 /**
  * Calculates the logical conjunction of multiple matchers. Evaluation is shortcut, so
@@ -51,6 +52,6 @@
      */
     @SafeVarargs
     public static <T> Matcher<T> allOf(Matcher<? super T>... matchers) {
-        return allOf(Arrays.asList(matchers));
+        return allOf((List) Arrays.asList(matchers));
     }
 }
diff --git a/hamcrest-core/src/main/java/org/hamcrest/core/AnyOf.java b/hamcrest-core/src/main/java/org/hamcrest/core/AnyOf.java
index 03cc210..106a473 100644
--- a/hamcrest-core/src/main/java/org/hamcrest/core/AnyOf.java
+++ b/hamcrest-core/src/main/java/org/hamcrest/core/AnyOf.java
@@ -4,6 +4,7 @@
 import org.hamcrest.Matcher;
 
 import java.util.Arrays;
+import java.util.List;
 
 /**
  * Calculates the logical disjunction of multiple matchers. Evaluation is shortcut, so
@@ -41,6 +42,6 @@
      */
     @SafeVarargs
     public static <T> AnyOf<T> anyOf(Matcher<? super T>... matchers) {
-        return anyOf(Arrays.asList(matchers));
+        return anyOf((List) Arrays.asList(matchers));
     }
 }
diff --git a/hamcrest-library/src/main/java/org/hamcrest/collection/IsArrayContainingInAnyOrder.java b/hamcrest-library/src/main/java/org/hamcrest/collection/IsArrayContainingInAnyOrder.java
index 5748820..a3a93c1 100644
--- a/hamcrest-library/src/main/java/org/hamcrest/collection/IsArrayContainingInAnyOrder.java
+++ b/hamcrest-library/src/main/java/org/hamcrest/collection/IsArrayContainingInAnyOrder.java
@@ -57,7 +57,7 @@
      *     a list of matchers, each of which must be satisfied by an entry in an examined array
      */
     public static <E> Matcher<E[]> arrayContainingInAnyOrder(Matcher<? super E>... itemMatchers) {
-        return arrayContainingInAnyOrder(Arrays.asList(itemMatchers));
+        return arrayContainingInAnyOrder((List) Arrays.asList(itemMatchers));
     }
 
     /**
diff --git a/hamcrest-library/src/main/java/org/hamcrest/collection/IsIterableContainingInAnyOrder.java b/hamcrest-library/src/main/java/org/hamcrest/collection/IsIterableContainingInAnyOrder.java
index 4933e38..6f2fc47 100644
--- a/hamcrest-library/src/main/java/org/hamcrest/collection/IsIterableContainingInAnyOrder.java
+++ b/hamcrest-library/src/main/java/org/hamcrest/collection/IsIterableContainingInAnyOrder.java
@@ -97,7 +97,7 @@
      *     a list of matchers, each of which must be satisfied by an item provided by an examined {@link Iterable}
      */
     public static <T> Matcher<Iterable<? extends T>> containsInAnyOrder(Matcher<? super T>... itemMatchers) {
-        return containsInAnyOrder(Arrays.asList(itemMatchers));
+        return containsInAnyOrder((List) Arrays.asList(itemMatchers));
     }
 
     /**
diff --git a/hamcrest-library/src/main/java/org/hamcrest/collection/IsIterableContainingInRelativeOrder.java b/hamcrest-library/src/main/java/org/hamcrest/collection/IsIterableContainingInRelativeOrder.java
index b0b9db2..f669835 100644
--- a/hamcrest-library/src/main/java/org/hamcrest/collection/IsIterableContainingInRelativeOrder.java
+++ b/hamcrest-library/src/main/java/org/hamcrest/collection/IsIterableContainingInRelativeOrder.java
@@ -97,7 +97,7 @@
      *     the matchers that must be satisfied by the items provided by an examined {@link Iterable} in the same relative order
      */
     public static <E> Matcher<Iterable<? extends E>> containsInRelativeOrder(Matcher<? super E>... itemMatchers) {
-        return containsInRelativeOrder(asList(itemMatchers));
+        return containsInRelativeOrder((List) asList(itemMatchers));
     }
 
     /**
