{"id":"f54280ae8a372746","repo":"google/gson","slug":"cannot-override-built-in-adapter-for-type","errorCode":null,"errorMessage":"Cannot override built-in adapter for {type}","messagePattern":"Cannot override built-in adapter for (.+?)","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"gson/src/main/java/com/google/gson/GsonBuilder.java","lineNumber":754,"sourceCode":"   *     class or {@link JsonElement} or any of its subclasses\n   * @see #registerTypeHierarchyAdapter(Class, Object)\n   */\n  @CanIgnoreReturnValue\n  public GsonBuilder registerTypeAdapter(Type type, Object typeAdapter) {\n    Objects.requireNonNull(type);\n    Objects.requireNonNull(typeAdapter);\n    if (!(typeAdapter instanceof JsonSerializer<?>\n        || typeAdapter instanceof JsonDeserializer<?>\n        || typeAdapter instanceof InstanceCreator<?>\n        || typeAdapter instanceof TypeAdapter<?>)) {\n      throw new IllegalArgumentException(\n          \"Class \"\n              + typeAdapter.getClass().getName()\n              + \" does not implement any supported type adapter class or interface\");\n    }\n\n    if (hasNonOverridableAdapter(type)) {\n      throw new IllegalArgumentException(\"Cannot override built-in adapter for \" + type);\n    }\n\n    if (typeAdapter instanceof InstanceCreator<?>) {\n      instanceCreators.put(type, (InstanceCreator<?>) typeAdapter);\n    }\n    if (typeAdapter instanceof JsonSerializer<?> || typeAdapter instanceof JsonDeserializer<?>) {\n      TypeToken<?> typeToken = TypeToken.get(type);\n      factories.add(TreeTypeAdapter.newFactoryWithMatchRawType(typeToken, typeAdapter));\n    }\n    if (typeAdapter instanceof TypeAdapter<?>) {\n      @SuppressWarnings({\"unchecked\", \"rawtypes\"})\n      TypeAdapterFactory factory =\n          TypeAdapters.newFactory(TypeToken.get(type), (TypeAdapter) typeAdapter);\n      factories.add(factory);\n    }\n    return this;\n  }\n","sourceCodeStart":736,"sourceCodeEnd":772,"githubUrl":"https://github.com/google/gson/blob/8b8628c65699bc4421696183c62ae0c1b9b281dc/gson/src/main/java/com/google/gson/GsonBuilder.java#L736-L772","documentation":"Thrown by registerTypeAdapter when type == Object.class. Gson's hasNonOverridableAdapter reserves Object.class for its internal reflective Object adapter and will not let a user replace it, because doing so would break deserialization of arbitrary object graphs.","triggerScenarios":"Calling gsonBuilder.registerTypeAdapter(Object.class, adapter) for any adapter type, regardless of whether the adapter itself is valid.","commonSituations":"Trying to globally customize serialization of every object; migrating code from an older Gson usage that relied on overriding Object; attempting to intercept all polymorphic values.","solutions":["Register the adapter against a concrete base type, not Object.class.","For polymorphic hierarchies use registerTypeHierarchyAdapter(MyBase.class, adapter) with a specific base class or interface.","To influence all serialization, add a TypeAdapterFactory via registerTypeAdapterFactory and let it return null for types you do not own.","If you need RuntimeTypeAdapterFactory-style polymorphism, register on the declared supertype."],"exampleFix":"// before\ngsonBuilder.registerTypeAdapter(Object.class, new MyObjectAdapter());\n// after\ngsonBuilder.registerTypeHierarchyAdapter(MyBase.class, new MyBaseAdapter());","handlingStrategy":"validation","validationCode":"// Block reserved types before registering\njava.lang.reflect.Type type = Object.class;\nif (type == Object.class) {\n  throw new IllegalArgumentException(\"Cannot register adapter for Object.class; use a concrete base type\");\n}\ngsonBuilder.registerTypeAdapter(type, adapter);","typeGuard":"boolean isOverridableType(java.lang.reflect.Type t) { return t != Object.class; }","tryCatchPattern":null,"preventionTips":["Never register against Object.class.","Pick the most specific common supertype for hierarchy adapters.","Document which types each adapter owns to avoid collisions with built-ins."],"tags":["gson","type-adapter","object-class","configuration"],"analyzedSha":"8b8628c65699bc4421696183c62ae0c1b9b281dc","analyzedAt":"2026-08-04T19:12:22.202Z","schemaVersion":2}