-
Bug
-
Resolution: Not an Issue
-
P4
-
None
-
11, 17
-
generic
-
generic
ADDITIONAL SYSTEM INFORMATION :
java;
version: java 17 / 20 (jdk 17.0.1, openjdk 17.0.2, jdk 20.0.1, openjdk 20.0.1)
openjdk version "17.0.2" 2022-01-18
OpenJDK Runtime Environment (build 17.0.2+8-86)
OpenJDK 64-Bit Server VM (build 17.0.2+8-86, mixed mode, sharing)
os:
mac
maven 3:
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /Users/liuxun/Documents/apache-maven-3.6.3
Java version: 17.0.2, vendor: Oracle Corporation, runtime: /Library/Java/JavaVirtualMachines/jdk-17.0.2.jdk/Contents/Home
Default locale: zh_CN_#Hans, platform encoding: UTF-8
OS name: "mac os x", version: "12.6.3", arch: "x86_64", family: "mac"
A DESCRIPTION OF THE PROBLEM :
1: follow the code[see belowed block: Source code for an executable test case] or refer the test project issue : https://github.com/chwod/bugs/issues/1
2: run the main method, then throw the exception:
Exception in thread "main" java.lang.ClassCastException: class java.util.Arrays$ArrayList cannot be cast to class java.lang.String (java.util.Arrays$ArrayList and java.lang.String are in module java.base of loader 'bootstrap')
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
at java.base/java.util.stream.ReduceOps$ReduceTask.doLeaf(ReduceOps.java:960)
at java.base/java.util.stream.ReduceOps$ReduceTask.doLeaf(ReduceOps.java:934)
at java.base/java.util.stream.AbstractTask.compute(AbstractTask.java:327)
at java.base/java.util.concurrent.CountedCompleter.exec(CountedCompleter.java:754)
at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:387)
at java.base/java.util.concurrent.ForkJoinTask.invoke(ForkJoinTask.java:667)
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateParallel(ReduceOps.java:927)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:233)
at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)
at Test.main(Test.java:22)
the exception threw at the line 22, but the line 22 is the vaue used after the value cast(line 11):we expect that the exception threw at line 11, when the type cast unsupport.
3; if the exception throw at the line 22, I think we do not know how to avoid it. if throw at the line 11, we can surround with try/catch block to avoid it.
4: if the exception not throw at the line 11, would cause the return parameter type to not work as expected, see the follow inspect picture: https://github.com/chwod/bugs/blob/main/inspect.png?raw=true
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
the exception threw at the line 11
ACTUAL -
the exception throw at the line 22
---------- BEGIN SOURCE ----------
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class Test {
private static <T> List<T> get(Object o) {
var list = new ArrayList<T>();
list.add(
(T) o
);
return list;
}
public static void main(String... strings) {
var a = Arrays.asList("v");
List<String> b = Test.<String>get(a);
System.out.println(b);
var c = b.parallelStream()
.map(d -> d)
.collect(
Collectors.toList());
System.out.println(c);
}
}
---------- END SOURCE ----------
FREQUENCY : always
java;
version: java 17 / 20 (jdk 17.0.1, openjdk 17.0.2, jdk 20.0.1, openjdk 20.0.1)
openjdk version "17.0.2" 2022-01-18
OpenJDK Runtime Environment (build 17.0.2+8-86)
OpenJDK 64-Bit Server VM (build 17.0.2+8-86, mixed mode, sharing)
os:
mac
maven 3:
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /Users/liuxun/Documents/apache-maven-3.6.3
Java version: 17.0.2, vendor: Oracle Corporation, runtime: /Library/Java/JavaVirtualMachines/jdk-17.0.2.jdk/Contents/Home
Default locale: zh_CN_#Hans, platform encoding: UTF-8
OS name: "mac os x", version: "12.6.3", arch: "x86_64", family: "mac"
A DESCRIPTION OF THE PROBLEM :
1: follow the code[see belowed block: Source code for an executable test case] or refer the test project issue : https://github.com/chwod/bugs/issues/1
2: run the main method, then throw the exception:
Exception in thread "main" java.lang.ClassCastException: class java.util.Arrays$ArrayList cannot be cast to class java.lang.String (java.util.Arrays$ArrayList and java.lang.String are in module java.base of loader 'bootstrap')
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
at java.base/java.util.stream.ReduceOps$ReduceTask.doLeaf(ReduceOps.java:960)
at java.base/java.util.stream.ReduceOps$ReduceTask.doLeaf(ReduceOps.java:934)
at java.base/java.util.stream.AbstractTask.compute(AbstractTask.java:327)
at java.base/java.util.concurrent.CountedCompleter.exec(CountedCompleter.java:754)
at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:387)
at java.base/java.util.concurrent.ForkJoinTask.invoke(ForkJoinTask.java:667)
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateParallel(ReduceOps.java:927)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:233)
at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)
at Test.main(Test.java:22)
the exception threw at the line 22, but the line 22 is the vaue used after the value cast(line 11):we expect that the exception threw at line 11, when the type cast unsupport.
3; if the exception throw at the line 22, I think we do not know how to avoid it. if throw at the line 11, we can surround with try/catch block to avoid it.
4: if the exception not throw at the line 11, would cause the return parameter type to not work as expected, see the follow inspect picture: https://github.com/chwod/bugs/blob/main/inspect.png?raw=true
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
the exception threw at the line 11
ACTUAL -
the exception throw at the line 22
---------- BEGIN SOURCE ----------
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class Test {
private static <T> List<T> get(Object o) {
var list = new ArrayList<T>();
list.add(
(T) o
);
return list;
}
public static void main(String... strings) {
var a = Arrays.asList("v");
List<String> b = Test.<String>get(a);
System.out.println(b);
var c = b.parallelStream()
.map(d -> d)
.collect(
Collectors.toList());
System.out.println(c);
}
}
---------- END SOURCE ----------
FREQUENCY : always