Not using checkedCollection:

package com.logicbig.example.collections;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
public class CheckedCollectionExample {
public static void main(String... args) {
Collection<String> c = new ArrayList<>();
Collections.addAll(c, "apple", "banana");
System.out.println(c);
Collection c2 = c;
c2.add(1);
System.out.println(c2);
}
}
Output
[apple, banana]
[apple, banana, 1]
JDK 25 Using checkedCollection:

package com.logicbig.example.collections;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
public class CheckedCollectionExample2 {
public static void main(String... args) {
Collection<String> c = new ArrayList<>();
c = Collections.checkedCollection(c, String.class);
Collections.addAll(c, "apple", "banana");
System.out.println(c);
Collection c2 = c;
c2.add(1);//this throws exception
System.out.println(c2);
}
}
Output
[apple, banana]
java.lang.ClassCastException: Attempt to insert class java.lang.Integer element into collection with element type class java.lang.String
at java.util.Collections$CheckedCollection.typeCheck (Collections.java:3455)
at java.util.Collections$CheckedCollection.add (Collections.java:3503)
at com.logicbig.example.collections.CheckedCollectionExample2.main (CheckedCollectionExample2.java:22)
at jdk.internal.reflect.DirectMethodHandleAccessor.invoke (DirectMethodHandleAccessor.java:104)
at java.lang.reflect.Method.invoke (Method.java:565)
at org.codehaus.mojo.exec.AbstractExecJavaBase.executeMainMethod (AbstractExecJavaBase.java:402)
at org.codehaus.mojo.exec.ExecJavaMojo.executeMainMethod (ExecJavaMojo.java:142)
at org.codehaus.mojo.exec.AbstractExecJavaBase.doExecClassLoader (AbstractExecJavaBase.java:377)
at org.codehaus.mojo.exec.AbstractExecJavaBase.lambda$execute$0 (AbstractExecJavaBase.java:287)
at java.lang.Thread.run (Thread.java:1474)
JDK 25