{"record":{"id":"db1539cafcaa95f9","repo":"stanfordnlp/CoreNLP","slug":"argument-i-to-class-constructor-is-null","errorCode":null,"errorMessage":"Argument \" + i + \" to class constructor is null","messagePattern":"Argument \" \\+ i \\+ \" to class constructor is null","errorType":"exception","errorClass":"ClassCreationException","httpStatus":null,"severity":"error","filePath":"src/edu/stanford/nlp/util/MetaClass.java","lineNumber":198,"sourceCode":"        }\n        String target = b.substring(0, params.length==0 ? b.length() : b.length() - 2) + \")\";\n        throw new ConstructorNotFoundException(\n            \"No constructor found to match: \" + target);\n      }\n    }\n\n    private ClassFactory(String classname, Class<?>... params)\n        throws ClassNotFoundException, NoSuchMethodException {\n      // (generic construct)\n      construct(classname, params);\n    }\n\n    private ClassFactory(String classname, Object... params)\n        throws ClassNotFoundException, NoSuchMethodException {\n      // (convert class parameters)\n      Class<?>[] classParams = new Class[params.length];\n      for (int i = 0; i < params.length; i++) {\n        if(params[i] == null) throw new ClassCreationException(\"Argument \" + i + \" to class constructor is null\");\n        classParams[i] = params[i].getClass();\n      }\n      // (generic construct)\n      construct(classname, classParams);\n    }\n\n    private ClassFactory(String classname, String... params)\n        throws ClassNotFoundException, NoSuchMethodException {\n      // (convert class parameters)\n      Class<?>[] classParams = new Class[params.length];\n      for (int i = 0; i < params.length; i++) {\n        classParams[i] = Class.forName(params[i]);\n      }\n      // (generic construct)\n      construct(classname, classParams);\n    }\n\n    /**","sourceCodeStart":180,"sourceCodeEnd":216,"githubUrl":"https://github.com/stanfordnlp/CoreNLP/blob/1b7edd19c4d0d7b1f13a2591425b9b60a0b1af7a/src/edu/stanford/nlp/util/MetaClass.java#L180-L216","documentation":"MetaClass.ClassFactory derives constructor parameter types by calling getClass() on each supplied argument. Because getClass() on null is impossible and a null constructor argument cannot be typed, the factory immediately throws ClassCreationException for any null argument.","triggerScenarios":"Calling MetaClass.create(...).createInstance(a, null, c) — i.e. passing null among the constructor arguments, or programmatically building an args array where some entries were not initialized.","commonSituations":"Config-driven instantiation where an optional option resolved to null, reflection helper code passing null placeholders, test code constructing components with missing dependencies.","solutions":["Replace null arguments with explicit typed defaults before calling createInstance","Use a constructor overload that accepts no such argument, or configure the field afterward via setters","Guard the args array: check for nulls and supply class-typed defaults (e.g. empty String/0/false)","Wrap construction in try-catch for ClassCreationException and log which argument was null"],"exampleFix":"// before\nfactory.createInstance(name, null); // throws\n// after\nfactory.createInstance(name, defaultValue != null ? defaultValue : DEFAULT_VALUE);","handlingStrategy":"validation","validationCode":"for (int i = 0; i < args.length; i++) {\n  if (args[i] == null) throw new IllegalArgumentException(\"arg \" + i + \" is null\");\n}\nT obj = MetaClass.create(classname).createInstance(args);","typeGuard":"boolean hasNoNulls(Object[] args) {\n  return java.util.Arrays.stream(args).noneMatch(java.util.Objects::isNull);\n}","tryCatchPattern":"try {\n  T obj = MetaClass.create(classname).createInstance(args);\n} catch (MetaClass.ClassCreationException e) {\n  if (e.getMessage() != null && e.getMessage().contains(\"is null\")) {\n    // substitute defaults for null args and retry\n  } else { throw e; }\n}","preventionTips":["Substitute defaults for optional config values before instantiation","Assert args array is fully populated before calling createInstance","Avoid passing null placeholders in reflection-based construction","Validate config-derived arguments early at startup"],"tags":["reflection","null-argument","constructor"],"backgroundTag":"null-argument","analyzedSha":"1b7edd19c4d0d7b1f13a2591425b9b60a0b1af7a","analyzedAt":"2026-09-10T02:24:07.274Z","contentChangedAt":"2026-09-10T02:24:07.274Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}