Merge pull request #10440 from sk1418/BAEL-2517_unchecked_conversion
BAEL-2517
This commit is contained in:
commit
64121f0c79
|
@ -13,4 +13,32 @@
|
||||||
<name>core-java-lang-oop-generics</name>
|
<name>core-java-lang-oop-generics</name>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<resources>
|
||||||
|
<resource>
|
||||||
|
<directory>src/main/resources</directory>
|
||||||
|
<filtering>true</filtering>
|
||||||
|
</resource>
|
||||||
|
</resources>
|
||||||
|
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<version>${maven-compiler-plugin.version}</version>
|
||||||
|
<configuration>
|
||||||
|
<source>${maven.compiler.source}</source>
|
||||||
|
<target>${maven.compiler.target}</target>
|
||||||
|
<compilerArguments>
|
||||||
|
<Xlint:unchecked/>
|
||||||
|
</compilerArguments>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
<properties>
|
||||||
|
<maven.compiler.source>1.8</maven.compiler.source>
|
||||||
|
<maven.compiler.target>1.8</maven.compiler.target>
|
||||||
|
</properties>
|
||||||
|
|
||||||
</project>
|
</project>
|
|
@ -0,0 +1,45 @@
|
||||||
|
package com.baeldung.uncheckedconversion;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class UncheckedConversion {
|
||||||
|
public static List getRawList() {
|
||||||
|
List result = new ArrayList();
|
||||||
|
result.add("I am the 1st String.");
|
||||||
|
result.add("I am the 2nd String.");
|
||||||
|
result.add("I am the 3rd String.");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List getRawListWithMixedTypes() {
|
||||||
|
List result = new ArrayList();
|
||||||
|
result.add("I am the 1st String.");
|
||||||
|
result.add("I am the 2nd String.");
|
||||||
|
result.add("I am the 3rd String.");
|
||||||
|
result.add(new Date());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T> List<T> castList(Class<? extends T> clazz, Collection<?> rawCollection) {
|
||||||
|
List<T> result = new ArrayList<>(rawCollection.size());
|
||||||
|
for (Object o : rawCollection) {
|
||||||
|
try {
|
||||||
|
result.add(clazz.cast(o));
|
||||||
|
} catch (ClassCastException e) {
|
||||||
|
// log the exception or other error handling
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T> List<T> castList2(Class<? extends T> clazz, Collection<?> rawCollection) throws ClassCastException {
|
||||||
|
List<T> result = new ArrayList<>(rawCollection.size());
|
||||||
|
for (Object o : rawCollection) {
|
||||||
|
result.add(clazz.cast(o));
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
package com.baeldung.uncheckedconversion;
|
||||||
|
|
||||||
|
import org.junit.Assert;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class UncheckedConversionUnitTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenRawList_whenAssignToTypedList_shouldHaveCompilerWarning() {
|
||||||
|
List<String> fromRawList = UncheckedConversion.getRawList();
|
||||||
|
Assert.assertEquals(3, fromRawList.size());
|
||||||
|
Assert.assertEquals("I am the 1st String.", fromRawList.get(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = ClassCastException.class)
|
||||||
|
public void givenRawList_whenListHasMixedType_shouldThrowClassCastException() {
|
||||||
|
List<String> fromRawList = UncheckedConversion.getRawListWithMixedTypes();
|
||||||
|
Assert.assertEquals(4, fromRawList.size());
|
||||||
|
Assert.assertFalse(fromRawList.get(3).endsWith("String."));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenRawList_whenAssignToTypedListAfterCallingCastList_shouldOnlyHaveElementsWithExpectedType() {
|
||||||
|
List rawList = UncheckedConversion.getRawListWithMixedTypes();
|
||||||
|
List<String> strList = UncheckedConversion.castList(String.class, rawList);
|
||||||
|
Assert.assertEquals(4, rawList.size());
|
||||||
|
Assert.assertEquals("One element with the wrong type has been filtered out.", 3, strList.size());
|
||||||
|
Assert.assertTrue(strList.stream().allMatch(el -> el.endsWith("String.")));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = ClassCastException.class)
|
||||||
|
public void givenRawListWithWrongType_whenAssignToTypedListAfterCallingCastList2_shouldThrowException() {
|
||||||
|
List rawList = UncheckedConversion.getRawListWithMixedTypes();
|
||||||
|
UncheckedConversion.castList2(String.class, rawList);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue