{"record":{"id":"523df139fa61a3cd","repo":"Blankj/AndroidUtilCode","slug":"u-can-t-instantiate-me-523df1","errorCode":null,"errorMessage":"u can't instantiate me...","messagePattern":"u can't instantiate me\\.\\.\\.","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"lib/utilcode/src/main/java/com/blankj/utilcode/util/ObjectUtils.java","lineNumber":31,"sourceCode":"import java.util.Map;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.RequiresApi;\nimport androidx.collection.LongSparseArray;\nimport androidx.collection.SimpleArrayMap;\n\n/**\n * <pre>\n *     author: Blankj\n *     blog  : http://blankj.com\n *     time  : 2017/12/24\n *     desc  : utils about object\n * </pre>\n */\npublic final class ObjectUtils {\n\n    private ObjectUtils() {\n        throw new UnsupportedOperationException(\"u can't instantiate me...\");\n    }\n\n    /**\n     * Return whether object is empty.\n     *\n     * @param obj The object.\n     * @return {@code true}: yes<br>{@code false}: no\n     */\n    public static boolean isEmpty(final Object obj) {\n        if (obj == null) {\n            return true;\n        }\n        if (obj.getClass().isArray() && Array.getLength(obj) == 0) {\n            return true;\n        }\n        if (obj instanceof CharSequence && obj.toString().length() == 0) {\n            return true;\n        }","sourceCodeStart":13,"sourceCodeEnd":49,"githubUrl":"https://github.com/Blankj/AndroidUtilCode/blob/7b4caf9e5440046b3fefb63b6b6e2ead7ebaf809/lib/utilcode/src/main/java/com/blankj/utilcode/util/ObjectUtils.java#L13-L49","documentation":"ObjectUtils is a final utility class providing static methods for object comparison, null-checking (requireNonNull, requireNonNulls), emptiness checks, and defaulting (getOrDefault). Its private constructor throws UnsupportedOperationException to enforce static-only access.","triggerScenarios":"Direct or reflective instantiation by DI frameworks, mocking libraries, serialization frameworks, or manual reflection via Constructor.newInstance().","commonSituations":"DI component scanning traverses the utility package and attempts construction; a test suite instantiates all classes; a serialization library targets the class.","solutions":["Use static methods: ObjectUtils.requireNonNull(obj), ObjectUtils.isEmpty(obj). Never call new ObjectUtils().","Exclude utility classes from DI scanning and serialization configs.","Mock static methods with mockito-inline for testing."],"exampleFix":"// before\nObjectUtils ou = new ObjectUtils();\nboolean empty = ou.isEmpty(list);\n\n// after\nboolean empty = ObjectUtils.isEmpty(list);","handlingStrategy":"type-guard","validationCode":"// ObjectUtils is static-only\nboolean empty = ObjectUtils.isEmpty(obj);\nT nonNull = ObjectUtils.requireNonNull(obj, \"must not be null\");","typeGuard":"static boolean isStaticUtility(Class<?> c) {\n    return Modifier.isFinal(c.getModifiers()) && c.getSimpleName().endsWith(\"Utils\");\n}","tryCatchPattern":"try {\n    ObjectUtils.class.getDeclaredConstructor().setAccessible(true);\n    ObjectUtils.class.getDeclaredConstructor().newInstance();\n} catch (UnsupportedOperationException e) {\n    // Use static methods\n}","preventionTips":["Never instantiate classes ending in 'Utils'.","Exclude util packages from DI and serialization scanning.","Use ObjectUtils.requireNonNull() with a descriptive message for validation."],"tags":["java","android","utility-class","instantiation","object"],"backgroundTag":null,"analyzedSha":"7b4caf9e5440046b3fefb63b6b6e2ead7ebaf809","analyzedAt":"2026-08-14T02:26:54.956Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}