{"record":{"id":"2eba08e4d6d5d50c","repo":"baomidou/mybatis-plus","slug":"type-argument-cannot-be-null-2eba08","errorCode":null,"errorMessage":"Type argument cannot be null","messagePattern":"Type argument cannot be null","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/handlers/MybatisEnumTypeHandler.java","lineNumber":46,"sourceCode":"\n/**\n * 自定义枚举属性转换器\n *\n * @author hubin\n * @since 2017-10-11\n */\npublic final class MybatisEnumTypeHandler<E extends Enum<E>> extends BaseTypeHandler<E> {\n\n    private final EnumMetadata metadata;\n\n    /**\n     * 创建枚举类型处理器。\n     *\n     * @param enumClassType 枚举类型\n     */\n    public MybatisEnumTypeHandler(Class<E> enumClassType) {\n        if (enumClassType == null) {\n            throw new IllegalArgumentException(\"Type argument cannot be null\");\n        }\n        this.metadata = EnumUtils.metadata(enumClassType);\n    }\n\n    /**\n     * 查找标记标记EnumValue字段。\n     *\n     * @param clazz class\n     * @return EnumValue字段\n     * @since 3.3.1\n     */\n    public static Optional<String> findEnumValueFieldName(Class<?> clazz) {\n        return EnumUtils.findEnumValueFieldName(clazz);\n    }\n\n    @SuppressWarnings(\"Duplicates\")\n    @Override\n    public void setNonNullParameter(PreparedStatement ps, int i, E parameter, JdbcType jdbcType)","sourceCodeStart":28,"sourceCodeEnd":64,"githubUrl":"https://github.com/baomidou/mybatis-plus/blob/bf67d907478c724120bf76292da54abf9e73c2b3/mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/handlers/MybatisEnumTypeHandler.java#L28-L64","documentation":"MybatisEnumTypeHandler (used for enums with @EnumValue/IEnum support) was constructed with a null enum class. Unlike error 28, this occurs when the handler is instantiated directly or via a registry path that passes no resolvable enum type.","triggerScenarios":"Registering MybatisEnumTypeHandler directly as the default enum handler (e.g. typeHandlerRegistry or configuration setting) in a context where the Java type is unknown; explicit new MybatisEnumTypeHandler<>(null); mapper statements whose javaType is missing and unresolvable for an enum property.","commonSituations":"Setting mybatis-plus default-enum-type-handler to MybatisEnumTypeHandler instead of CompositeEnumTypeHandler; inline typeHandler= references in XML without a javaType on the property; custom registration code passing a null class.","solutions":["Use CompositeEnumTypeHandler as the default enum handler; MybatisEnumTypeHandler is meant to be created with a concrete enum class","In XML, always pair typeHandler=\"...MybatisEnumTypeHandler\" with an explicit javaType=\"com.example.MyEnum\"","Fix custom registration code to pass the resolved enum class, never null"],"exampleFix":"<!-- before -->\n<result property=\"status\" typeHandler=\"org.apache.ibatis.type.MybatisEnumTypeHandler\"/>\n<!-- after -->\n<result property=\"status\" javaType=\"com.example.Status\" typeHandler=\"com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler\"/>","handlingStrategy":"validation","validationCode":"if (enumClass == null || !enumClass.isEnum()) {\n    throw new IllegalStateException(\"MybatisEnumTypeHandler requires a concrete enum class\");\n}\nnew MyEnumTypeHandler<>(enumClass);","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Register CompositeEnumTypeHandler as default; never MybatisEnumTypeHandler directly","Pair typeHandler= in XML with an explicit javaType","Cover enum mapping with an H2-backed integration test per enum"],"tags":["mybatis","type-handler","enum","null-argument"],"backgroundTag":null,"analyzedSha":"bf67d907478c724120bf76292da54abf9e73c2b3","analyzedAt":"2026-08-14T15:17:09.543Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}