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

Constructor.newInstance missing error when invoked against inner class

XMLWordPrintable

    • b16
    • 25
    • generic
    • generic

      ADDITIONAL SYSTEM INFORMATION :
      Windows 11; java -version:
      ```
      openjdk version "25-ea" 2025-09-16
      OpenJDK Runtime Environment (build 25-ea+33-3475)
      OpenJDK 64-Bit Server VM (build 25-ea+33-3475, mixed mode, sharing)
      ```

      A DESCRIPTION OF THE PROBLEM :
      In JDK 24, the inner class is created. In JDK 25, it throws `java.lang.reflect.InvocationTargetException` with `null`, non-descriptive message.

      Sample code:
      ```
      import java.lang.reflect.Constructor;
      import java.lang.reflect.Parameter;
      import java.util.Arrays;

      public class Test {
          public class Pojo {
              public String name;
          }

          public static void main(String[] _a) {
              System.out.println("Pojo: " + newup(Pojo.class));
          }

          public static <T> Object newup(Class<T> className) {
              try { return invoke(className.getConstructors()[0]); }
              catch (Throwable e) { return "ex: " + e.getMessage(); }
          }

          public static <T> T invoke(Constructor<T> ctor) throws Throwable {
              var params = Arrays.stream(ctor.getParameters()).map(Test::typeDefaultValue).toArray();
              @SuppressWarnings("unchecked")
              T t = (T) ctor.newInstance(params);
              return t;
          }

          public static Object typeDefaultValue(Parameter parameter) {
              var type = parameter.getType();
              if (!type.isPrimitive()) return null;
              if (type.equals(boolean.class)) return false;
              return 0;
          }
      }
      ```


            liach Chen Liang
            webbuggrp Webbug Group
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

              Created:
              Updated:
              Resolved: