Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8041662

String.valueof infers wrong type arg when arg is returned from generic method

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Not an Issue
    • Icon: P3 P3
    • 8u20
    • 8
    • tools
    • x86_64
    • linux

      FULL PRODUCT VERSION :
      java version "1.8.0"
      Java(TM) SE Runtime Environment (build 1.8.0-b132)
      Java HotSpot(TM) 64-Bit Server VM (build 25.0-b70, mixed mode)

      ADDITIONAL OS VERSION INFORMATION :
      Linux 3.8.0-35-generic #50-Ubuntu SMP Tue Dec 3 01:24:59 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

      A DESCRIPTION OF THE PROBLEM :
      Overloaded method java.lang.String.valueof infers a type argument of char[] when a generic method returns an Object (Integer or String).

      with source level set to 1.7 it works as expected.
      with source level set to 1.8 it throws
      Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to [C

      REGRESSION. Last worked in version 7u55

      ADDITIONAL REGRESSION INFORMATION:
      java version "1.8.0"
      Java(TM) SE Runtime Environment (build 1.8.0-b132)
      Java HotSpot(TM) 64-Bit Server VM (build 25.0-b70, mixed mode)

      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      public class Test {
          public static void main(String... args) throws Exception {
              System.out.println(String.valueOf(getNum()));
          }
          
          private static <T> T getNum(){
              Integer i = 123;
              return (T)i;
          }
      }

      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      invoke String.valueof(Object obj)
      ACTUAL -
      invoke String.valueof(char[] data)

      ERROR MESSAGES/STACK TRACES THAT OCCUR :
      Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to [C
      at Test.main(Test.java:6)
      Java Result: 1

      REPRODUCIBILITY :
      This bug can be reproduced always.

      ---------- BEGIN SOURCE ----------
      public class Test {
          public static void main(String... args) throws Exception {
              System.out.println(String.valueOf(getNum()));
          }
          
          private static <T> T getNum(){
              Integer i = 123;
              return (T)i;
          }
      }
      ---------- END SOURCE ----------

      CUSTOMER SUBMITTED WORKAROUND :
      public class Test {
          public static void main(String... args) throws Exception {
              System.out.println(String.valueOf((Object)getNum()));
          }
          
          private static <T> T getNum(){
              Integer i = 123;
              return (T)i;
          }
      }

            vromero Vicente Arturo Romero Zaldivar
            webbuggrp Webbug Group
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved: