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;
}
}
```
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;
}
}
```
- caused by
-
JDK-8164714 Constructor.newInstance creates instance of inner class with null outer class
-
- Resolved
-
- relates to
-
JDK-8233268 Improve integration of Objects.requireNonNull and JEP 358 Helpful NPE
-
- In Progress
-