Hello, I received a problem report from an ICU4J consumer who uses ICU4J Locale SPI module. ICU NumberFormatProvider returns a class - com.ibm.icu.impl.jdkadapter.NumberFormatICU which extends java.text.NumberFormat.
The ICU4J locale SPI user found the ICU provider causes an issue when he uses Scanner. I can reproduce the problem on my environment as well. The exception call stack shows - Exception in thread "main" java.lang.ClassCastException: com.ibm.icu.impl.jdkadapter.NumberFormatICU cannot be cast to java.text.DecimalFormat at java.util.Scanner.useLocale(Scanner.java:1186) at java.util.Scanner.<init>(Scanner.java:540) at java.util.Scanner.<init>(Scanner.java:563) at test.ScannerTest.main(ScannerTest.java:11) Below is the location in Scanner.java public Scanner useLocale(Locale locale) { if (locale.equals(this.locale)) return this; this.locale = locale; DecimalFormat df = (DecimalFormat)NumberFormat.getNumberInstance(locale); DecimalFormatSymbols dfs = DecimalFormatSymbols.getInstance(locale); So the implementation blindly cast NumberFormat instance returned by getNumberIntance(Locale) to DecimalFormat. I thought I reported this issue before. Are you aware of this issue? Maybe, I forgot to file a bug when I investigated this earlier in this year, because I could not find it in java bug. -Yoshito