diff --git a/commons-jcs-jcache-extras/src/main/java/org/apache/commons/jcs3/jcache/extras/cdi/CacheManagerBean.java b/commons-jcs-jcache-extras/src/main/java/org/apache/commons/jcs3/jcache/extras/cdi/CacheManagerBean.java
index 18b600f..50eaa1d 100644
--- a/commons-jcs-jcache-extras/src/main/java/org/apache/commons/jcs3/jcache/extras/cdi/CacheManagerBean.java
+++ b/commons-jcs-jcache-extras/src/main/java/org/apache/commons/jcs3/jcache/extras/cdi/CacheManagerBean.java
@@ -43,11 +43,11 @@
         manager = cacheManager;
         id = getClass().getName() + "-" + hashCode();
 
-        types = new HashSet<Type>();
+        types = new HashSet<>();
         types.add(CacheManager.class);
         types.add(Object.class);
 
-        qualifiers = new HashSet<Annotation>();
+        qualifiers = new HashSet<>();
         qualifiers.add(DefaultLiteral.INSTANCE);
         qualifiers.add(AnyLiteral.INSTANCE);
     }
diff --git a/commons-jcs-jcache-extras/src/main/java/org/apache/commons/jcs3/jcache/extras/cdi/CacheProviderBean.java b/commons-jcs-jcache-extras/src/main/java/org/apache/commons/jcs3/jcache/extras/cdi/CacheProviderBean.java
index e9bd965..f188989 100644
--- a/commons-jcs-jcache-extras/src/main/java/org/apache/commons/jcs3/jcache/extras/cdi/CacheProviderBean.java
+++ b/commons-jcs-jcache-extras/src/main/java/org/apache/commons/jcs3/jcache/extras/cdi/CacheProviderBean.java
@@ -43,11 +43,11 @@
         provider = cacheManager;
         id = getClass().getName() + "-" + hashCode();
 
-        types = new HashSet<Type>();
+        types = new HashSet<>();
         types.add(CachingProvider.class);
         types.add(Object.class);
 
-        qualifiers = new HashSet<Annotation>();
+        qualifiers = new HashSet<>();
         qualifiers.add(DefaultLiteral.INSTANCE);
         qualifiers.add(AnyLiteral.INSTANCE);
     }
diff --git a/commons-jcs-jcache-extras/src/main/java/org/apache/commons/jcs3/jcache/extras/loader/CacheLoaderAdapter.java b/commons-jcs-jcache-extras/src/main/java/org/apache/commons/jcs3/jcache/extras/loader/CacheLoaderAdapter.java
index 7e77c4a..24dea7c 100644
--- a/commons-jcs-jcache-extras/src/main/java/org/apache/commons/jcs3/jcache/extras/loader/CacheLoaderAdapter.java
+++ b/commons-jcs-jcache-extras/src/main/java/org/apache/commons/jcs3/jcache/extras/loader/CacheLoaderAdapter.java
@@ -29,7 +29,7 @@
     @Override
     public Map<K, V> loadAll(final Iterable<? extends K> keys) throws CacheLoaderException
     {
-        final Map<K, V> result = new HashMap<K, V>();
+        final Map<K, V> result = new HashMap<>();
         for (final K k : keys)
         {
             final V v = load(k);
diff --git a/commons-jcs-jcache-extras/src/main/java/org/apache/commons/jcs3/jcache/extras/loader/CompositeCacheLoader.java b/commons-jcs-jcache-extras/src/main/java/org/apache/commons/jcs3/jcache/extras/loader/CompositeCacheLoader.java
index 767e177..254b417 100644
--- a/commons-jcs-jcache-extras/src/main/java/org/apache/commons/jcs3/jcache/extras/loader/CompositeCacheLoader.java
+++ b/commons-jcs-jcache-extras/src/main/java/org/apache/commons/jcs3/jcache/extras/loader/CompositeCacheLoader.java
@@ -57,13 +57,13 @@
     @Override
     public Map<K, V> loadAll(final Iterable<? extends K> keys) throws CacheLoaderException
     {
-        final Collection<K> list = new ArrayList<K>();
+        final Collection<K> list = new ArrayList<>();
         for (final K k : keys)
         {
             list.add(k);
         }
 
-        final Map<K, V> result = new HashMap<K, V>();
+        final Map<K, V> result = new HashMap<>();
         for (final CacheLoader<K, V> delegate : delegates)
         {
             final Map<K, V> v = delegate.loadAll(list);
diff --git a/commons-jcs-jcache-extras/src/main/java/org/apache/commons/jcs3/jcache/extras/web/InMemoryResponse.java b/commons-jcs-jcache-extras/src/main/java/org/apache/commons/jcs3/jcache/extras/web/InMemoryResponse.java
index 0f468d7..d1da556 100644
--- a/commons-jcs-jcache-extras/src/main/java/org/apache/commons/jcs3/jcache/extras/web/InMemoryResponse.java
+++ b/commons-jcs-jcache-extras/src/main/java/org/apache/commons/jcs3/jcache/extras/web/InMemoryResponse.java
@@ -39,8 +39,8 @@
 {
     private final OutputStream buffer;
 
-    private final Collection<Cookie> cookies = new CopyOnWriteArraySet<Cookie>();
-    private final Map<String, List<Serializable>> headers = new TreeMap<String, List<Serializable>>(String.CASE_INSENSITIVE_ORDER);
+    private final Collection<Cookie> cookies = new CopyOnWriteArraySet<>();
+    private final Map<String, List<Serializable>> headers = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
     private int status = SC_OK;
     private String contentType = null;
     private PrintWriter writer;
@@ -56,7 +56,7 @@
     {
         List<Serializable> values = headers.get(s);
         if (values == null) {
-            values = new LinkedList<Serializable>();
+            values = new LinkedList<>();
             headers.put(s, values);
         }
         return values;
@@ -117,7 +117,7 @@
     public Collection<String> getHeaders(final String s)
     {
         final List<Serializable> serializables = headers.get(s);
-        final Collection<String> strings = new ArrayList<String>(serializables.size());
+        final Collection<String> strings = new ArrayList<>(serializables.size());
         for (final Serializable ser : serializables)
         {
             strings.add(ser.toString());
diff --git a/commons-jcs-jcache-extras/src/test/java/org/apache/commons/jcs3/jcache/extras/loader/CacheLoaderAdapterTest.java b/commons-jcs-jcache-extras/src/test/java/org/apache/commons/jcs3/jcache/extras/loader/CacheLoaderAdapterTest.java
index 8494462..bcc3558 100644
--- a/commons-jcs-jcache-extras/src/test/java/org/apache/commons/jcs3/jcache/extras/loader/CacheLoaderAdapterTest.java
+++ b/commons-jcs-jcache-extras/src/test/java/org/apache/commons/jcs3/jcache/extras/loader/CacheLoaderAdapterTest.java
@@ -58,7 +58,7 @@
         assertEquals("foo", cache.get("foo"));
 
         count.decrementAndGet();
-        cache.loadAll(new HashSet<String>(asList("a", "b")), true, null);
+        cache.loadAll(new HashSet<>(asList("a", "b")), true, null);
         int retries = 100;
         while (retries-- > 0 && count.get() != 2)
         {
diff --git a/commons-jcs-jcache-extras/src/test/java/org/apache/commons/jcs3/jcache/extras/loader/CompositeCacheLoaderTest.java b/commons-jcs-jcache-extras/src/test/java/org/apache/commons/jcs3/jcache/extras/loader/CompositeCacheLoaderTest.java
index 872d54c..37dc98b 100644
--- a/commons-jcs-jcache-extras/src/test/java/org/apache/commons/jcs3/jcache/extras/loader/CompositeCacheLoaderTest.java
+++ b/commons-jcs-jcache-extras/src/test/java/org/apache/commons/jcs3/jcache/extras/loader/CompositeCacheLoaderTest.java
@@ -60,7 +60,7 @@
     private final Configuration<?, ?> config = new MutableConfiguration<String, String>()
             .setStoreByValue(false)
             .setReadThrough(true)
-            .setCacheLoaderFactory(new CompositeCacheLoader<String, String>(loader1, loader2));
+            .setCacheLoaderFactory(new CompositeCacheLoader<>(loader1, loader2));
     private Cache<String, String> cache;
 
     @Test
diff --git a/commons-jcs-jcache-extras/src/test/java/org/apache/commons/jcs3/jcache/extras/writer/CacheWriterAdapterTest.java b/commons-jcs-jcache-extras/src/test/java/org/apache/commons/jcs3/jcache/extras/writer/CacheWriterAdapterTest.java
index 5300832..a5ff82d 100644
--- a/commons-jcs-jcache-extras/src/test/java/org/apache/commons/jcs3/jcache/extras/writer/CacheWriterAdapterTest.java
+++ b/commons-jcs-jcache-extras/src/test/java/org/apache/commons/jcs3/jcache/extras/writer/CacheWriterAdapterTest.java
@@ -41,7 +41,7 @@
     @Rule
     public final InternalCacheRule rule = new InternalCacheRule(this);
 
-    private final Map<String, String> copy = new HashMap<String, String>();
+    private final Map<String, String> copy = new HashMap<>();
     private final Configuration<?, ?> config = new MutableConfiguration<String, String>()
             .setStoreByValue(false).setReadThrough(true)
             .setCacheWriterFactory(new CacheWriterAdapter<String, String>()
@@ -75,7 +75,7 @@
             put("b", "c");
         }});
         assertEquals(2, copy.size());
-        cache.removeAll(new HashSet<String>(asList("a", "b")));
+        cache.removeAll(new HashSet<>(asList("a", "b")));
         assertTrue(copy.isEmpty());
     }
 }
diff --git a/commons-jcs-jcache-extras/src/test/java/org/apache/commons/jcs3/jcache/extras/writer/CompositeCacheWriterTest.java b/commons-jcs-jcache-extras/src/test/java/org/apache/commons/jcs3/jcache/extras/writer/CompositeCacheWriterTest.java
index a9b1609..9953717 100644
--- a/commons-jcs-jcache-extras/src/test/java/org/apache/commons/jcs3/jcache/extras/writer/CompositeCacheWriterTest.java
+++ b/commons-jcs-jcache-extras/src/test/java/org/apache/commons/jcs3/jcache/extras/writer/CompositeCacheWriterTest.java
@@ -40,8 +40,8 @@
     public final InternalCacheRule rule = new InternalCacheRule(this);
 
 
-    private final Map<String, String> copy1 = new HashMap<String, String>();
-    private final Map<String, String> copy2 = new HashMap<String, String>();
+    private final Map<String, String> copy1 = new HashMap<>();
+    private final Map<String, String> copy2 = new HashMap<>();
 
     private final CacheWriterAdapter<String, String> writer1 = new CacheWriterAdapter<String, String>()
     {
@@ -74,7 +74,7 @@
     private final Configuration<?, ?> config = new MutableConfiguration<String, String>()
             .setStoreByValue(false)
             .setWriteThrough(true)
-            .setCacheWriterFactory(new CompositeCacheWriter<String, String>(writer1, writer2));
+            .setCacheWriterFactory(new CompositeCacheWriter<>(writer1, writer2));
     private Cache<String, String> cache;
 
     @Test
diff --git a/commons-jcs-jcache-openjpa/src/main/java/org/apache/commons/jcs3/jcache/openjpa/OpenJPAJCacheDataCacheManager.java b/commons-jcs-jcache-openjpa/src/main/java/org/apache/commons/jcs3/jcache/openjpa/OpenJPAJCacheDataCacheManager.java
index 50bbdaa..9bc6666 100644
--- a/commons-jcs-jcache-openjpa/src/main/java/org/apache/commons/jcs3/jcache/openjpa/OpenJPAJCacheDataCacheManager.java
+++ b/commons-jcs-jcache-openjpa/src/main/java/org/apache/commons/jcs3/jcache/openjpa/OpenJPAJCacheDataCacheManager.java
@@ -83,7 +83,7 @@
         if (cache == null)
         {
             final Properties properties = cacheManager.getProperties();
-            final MutableConfiguration<Object, Object> configuration = new MutableConfiguration<Object, Object>()
+            final MutableConfiguration<Object, Object> configuration = new MutableConfiguration<>()
                     .setStoreByValue("true".equalsIgnoreCase(properties.getProperty("jcache.store-by-value", "false")));
 
             configuration.setReadThrough("true".equals(properties.getProperty("jcache.read-through", "false")));
diff --git a/commons-jcs-jcache-openjpa/src/main/java/org/apache/commons/jcs3/jcache/openjpa/OpenJPAJCacheQueryCache.java b/commons-jcs-jcache-openjpa/src/main/java/org/apache/commons/jcs3/jcache/openjpa/OpenJPAJCacheQueryCache.java
index 27818a3..559941e 100644
--- a/commons-jcs-jcache-openjpa/src/main/java/org/apache/commons/jcs3/jcache/openjpa/OpenJPAJCacheQueryCache.java
+++ b/commons-jcs-jcache-openjpa/src/main/java/org/apache/commons/jcs3/jcache/openjpa/OpenJPAJCacheQueryCache.java
@@ -62,7 +62,7 @@
     @Override
     protected Collection keySet()
     {
-        final Collection<QueryKey> keys = new LinkedList<QueryKey>();
+        final Collection<QueryKey> keys = new LinkedList<>();
         for (final Cache.Entry<Object, Object> entry : queryCache())
         {
             keys.add(QueryKey.class.cast(entry.getKey()));
