{"record":{"id":"ef9ec06151cc0570","repo":"redis/jedis","slug":"must-not-instantiate-this-class","errorCode":null,"errorMessage":"Must not instantiate this class","messagePattern":"Must not instantiate this class","errorType":"validation","errorClass":"InstantiationError","httpStatus":null,"severity":"error","filePath":"src/main/java/redis/clients/jedis/BuilderFactory.java","lineNumber":2638,"sourceCode":"      final List<Object> list = (List<Object>) data;\n      if (list.isEmpty()) return Collections.emptyList();\n\n      final List<KeyValue<Long, byte[]>> result = new ArrayList<>(list.size());\n      for (Object pair : list) {\n        List<Object> entry = (List<Object>) pair;\n        result.add(KeyValue.of(LONG.build(entry.get(0)), BINARY.build(entry.get(1))));\n      }\n      return result;\n    }\n\n    @Override\n    public String toString() {\n      return \"List<KeyValue<Long, byte[]>>\";\n    }\n  };\n\n  private BuilderFactory() {\n    throw new InstantiationError(\"Must not instantiate this class\");\n  }\n}\n","sourceCodeStart":2620,"sourceCodeEnd":2641,"githubUrl":"https://github.com/redis/jedis/blob/6dac31d4c224fb3257c216f3985340c6f500cdcb/src/main/java/redis/clients/jedis/BuilderFactory.java#L2620-L2641","documentation":"BuilderFactory is a utility class of static Builder constants for converting Redis replies into Java types. Its constructor is private and deliberately throws InstantiationError to prevent instantiation, since all functionality is exposed via static fields. This error means you (or reflection/serialization code) tried to create a new BuilderFactory instance.","triggerScenarios":"Calling `new BuilderFactory()` from user code, or frameworks that instantiate classes via reflection (e.g. some serializers, DI containers, or code-coverage tooling instantiating classes with private constructors).","commonSituations":"Accidental autocomplete-driven instantiation of a constants-only utility class; reflection-based tests requiring a constructor; serialization libraries attempting to deserialize BuilderFactory.","solutions":["Remove the `new BuilderFactory()` call and use the static Builder constants directly, e.g. `BuilderFactory.STRING`","If a framework needs to instantiate it, register it as non-instantiable or exclude it from reflective instantiation","If you need custom reply building, implement redis.clients.jedis.Builder yourself rather than subclassing/instantiating BuilderFactory"],"exampleFix":"// before\nBuilderFactory factory = new BuilderFactory();\nObject val = factory.build(data);\n// after\nObject val = BuilderFactory.STRING.build(data);","handlingStrategy":"validation","validationCode":"if (factory == null || factory.getClass() == BuilderFactory.class) { /* use static constants instead of instantiating */ }","typeGuard":"static boolean isBuilderFactoryConstant(Object o) { return o instanceof redis.clients.jedis.Builder; }","tryCatchPattern":"try { new BuilderFactory(); } catch (InstantiationError e) { logger.warn(\"BuilderFactory is a static utility class; use its Builder constants\"); }","preventionTips":["Never instantiate *Factory/*Builders utility classes with private constructors; use their static members","Exclude utility classes from reflection-based instantiation and code-coverage constructor tests","Prefer implementing the Builder interface for custom reply building"],"tags":["java","instantiation","utility-class","reflection"],"backgroundTag":"unsupported-operation","analyzedSha":"6dac31d4c224fb3257c216f3985340c6f500cdcb","analyzedAt":"2026-09-08T04:55:01.204Z","contentChangedAt":"2026-09-08T04:55:01.204Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}