Skip to content

Commit d65c984

Browse files
committed
SafeVarargsAnnotationTest++
SafeVarargsAnnotationTest++
1 parent aabdb31 commit d65c984

File tree

4 files changed

+85
-11
lines changed

4 files changed

+85
-11
lines changed

.classpath

+1-5
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<classpath>
33
<classpathentry kind="src" path="src/main/java"/>
4-
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jdk9-oracle">
5-
<attributes>
6-
<attribute name="module" value="true"/>
7-
</attributes>
8-
</classpathentry>
94
<classpathentry kind="lib" path="lib/guava-14.0-rc1.jar"/>
105
<classpathentry kind="lib" path="lib/hadoop-common-2.5.1.jar"/>
116
<classpathentry kind="lib" path="lib/hadoop-mapreduce-client-core-2.5.1.jar"/>
@@ -16,5 +11,6 @@
1611
<classpathentry kind="lib" path="lib/scala-library.jar"/>
1712
<classpathentry kind="lib" path="lib/spark-core_2.10-1.5.2.jar"/>
1813
<classpathentry kind="lib" path="lib/spark-streaming_2.10-1.5.2.jar"/>
14+
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jdk9-oracle"/>
1915
<classpathentry kind="output" path="bin"/>
2016
</classpath>

.gitignore

+2-5
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
1-
/bin/
2-
1+
bin/
2+
target/
33
inbravo.jar
44
inbravo-inst.jar
55
*.class
6-
*.class
7-
*.class
8-
*.class

README.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
- [Using 'Collections.sort' on Lambdas][ComparatorTest.md]
2323
- [Using 'List.forEach' on Lambdas][ForEachTest.md]
2424
- [List Streaming example][ListStreamTest.md]
25+
- [Remove compiler warning about generics vararg invocation using '@SafeVarargs' annotation](SafeVarargsAnnotationTest.md)
2526

2627
#### JDK 9 language features
2728
- [How 'jshell' (Read-Eval-Print Loop : JEP-222) works][JShellTest.md]
@@ -45,7 +46,6 @@
4546
- [Performance testing of 'ConcurrantMap'][ConcurrantMapTest.md]
4647
- [Usage of 'WeakHashMap'][WeakHashMapTest.md]
4748

48-
4949
#### Concurrency
5050
- [Usage of 'CountDownLatch'][CountDownLatch.md]
5151
- [Usage of 'CyclicBarrier'][CyclicBarrierTest.md]
@@ -155,6 +155,7 @@
155155
[TestMethodPerf.md]: https://github.com/inbravo/java-src/blob/master/src/main/java/com/inbravo/jdk8/lambda/perf/TestMethodPerf.java
156156
[TestMethodPerf.md]: https://github.com/inbravo/java-src/blob/master/src/main/java/com/inbravo/jdk8/lambda/perf/TestMethodPerf.java
157157
[ListStreamTest.md]: https://github.com/inbravo/java-src/blob/master/src/main/java/com/inbravo/jdk8/streams/ListStreamTest.java
158+
[SafeVarargsAnnotationTest.md]: https://github.com/inbravo/java-src/blob/master/src/main/java/com/inbravo/jdk8/streams/SafeVarargsAnnotationTest.java
158159
[ArmstrongNumber.md]: https://github.com/inbravo/java-src/blob/master/src/main/java/com/inbravo/number/ArmstrongNumber.java
159160
[FloydsTriangle.md]: https://github.com/inbravo/java-src/blob/master/src/main/java/com/inbravo/number/FloydsTriangle.java
160161
[HexNumberTest.md]: https://github.com/inbravo/java-src/blob/master/src/main/java/com/inbravo/number/HexNumberTest.java
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package com.inbravo.jdk7;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
6+
/**
7+
* This class demonstrates the purpose of '@SafeVarargs'
8+
*
9+
* @author amit.dixit
10+
*/
11+
public final class SafeVarargsAnnotationTest {
12+
13+
public static void main(final String... args) {
14+
15+
/* A list of integers */
16+
final List<Integer> listOfIntegers = new ArrayList<>();
17+
listOfIntegers.add(1);
18+
listOfIntegers.add(2);
19+
listOfIntegers.add(3);
20+
listOfIntegers.add(4);
21+
22+
/* A list of floats */
23+
final List<Float> listOfFloats = new ArrayList<>();
24+
listOfFloats.add(3.0f);
25+
listOfFloats.add(1.0f);
26+
listOfFloats.add(2.0f);
27+
listOfFloats.add(3.2f);
28+
29+
/* Scenario 1 - prior to Java 7, usage of code without '@SafeVarargs' */
30+
withoutSafeVarargsAnnotation(listOfIntegers, listOfFloats);
31+
32+
/* Scenario 2 - post Java 7, usage of code with '@SafeVarargs' */
33+
withSafeVarargsAnnotation(listOfIntegers, listOfFloats);
34+
}
35+
36+
/**
37+
* Method without '@SafeVarargs'
38+
*/
39+
@SuppressWarnings("unchecked")
40+
private static void withoutSafeVarargsAnnotation(final List<Integer> listOfIntegers, final List<Float> listOfFloats) {
41+
42+
/* Calling method without '@SafeVarargs' : It generates a warning */
43+
displayWithoutSafeVarargs(listOfIntegers, listOfFloats);
44+
}
45+
46+
/**
47+
* Method without '@SafeVarargs'
48+
*
49+
* Will show a warning to add '@SafeVarargs'
50+
*/
51+
private static void withSafeVarargsAnnotation(final List<Integer> listOfIntegers, final List<Float> listOfFloats) {
52+
53+
displayWithSafeVarargs(listOfIntegers, listOfFloats);
54+
}
55+
56+
/* Without '@SafeVarargs' shows warning */
57+
/* Warning 'Type safety: Potential heap pollution via 'varargs' parameter lists' */
58+
@SuppressWarnings("unchecked")
59+
private static <T> void displayWithoutSafeVarargs(final T... lists) {
60+
61+
/* Iterate on list */
62+
for (T element : lists) {
63+
64+
System.out.println("Display of elements without @SafeVarargs Annotation");
65+
System.out.println(element.getClass().getName() + ": " + element);
66+
}
67+
}
68+
69+
/* With usage of @SafeVarargs the Type Safety warning has been suppressed */
70+
@SafeVarargs
71+
private static <T> void displayWithSafeVarargs(final T... lists) {
72+
73+
/* Iterate on list */
74+
for (T element : lists) {
75+
76+
System.out.println("Display of elements with @SafeVarargs Annotation");
77+
System.out.println(element.getClass().getName() + ": " + element);
78+
}
79+
}
80+
}

0 commit comments

Comments
 (0)