{"record":{"id":"9e13745eb9833ff2","repo":"Blankj/AndroidUtilCode","slug":"u-can-t-instantiate-me-9e1374","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/RegexUtils.java","lineNumber":26,"sourceCode":"import java.util.Collections;\nimport java.util.List;\nimport java.util.regex.Matcher;\nimport java.util.regex.Pattern;\n\n/**\n * <pre>\n *     author: Blankj\n *     blog  : http://blankj.com\n *     time  : 2016/08/02\n *     desc  : utils about regex\n * </pre>\n */\npublic final class RegexUtils {\n\n    private final static SimpleArrayMap<String, String> CITY_MAP = new SimpleArrayMap<>();\n\n    private RegexUtils() {\n        throw new UnsupportedOperationException(\"u can't instantiate me...\");\n    }\n\n    ///////////////////////////////////////////////////////////////////////////\n    // If u want more please visit http://toutiao.com/i6231678548520731137\n    ///////////////////////////////////////////////////////////////////////////\n\n    /**\n     * Return whether input matches regex of simple mobile.\n     *\n     * @param input The input.\n     * @return {@code true}: yes<br>{@code false}: no\n     */\n    public static boolean isMobileSimple(final CharSequence input) {\n        return isMatch(RegexConstants.REGEX_MOBILE_SIMPLE, input);\n    }\n\n    \n    /**","sourceCodeStart":8,"sourceCodeEnd":44,"githubUrl":"https://github.com/Blankj/AndroidUtilCode/blob/7b4caf9e5440046b3fefb63b6b6e2ead7ebaf809/lib/utilcode/src/main/java/com/blankj/utilcode/util/RegexUtils.java#L8-L44","documentation":"RegexUtils is a final utility class providing static methods for regex-based validation (isMobileSimple, isEmail, isURL, isIDCard15/18, etc.) with an internal SimpleArrayMap for city lookups. 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.","commonSituations":"DI component scanning traverses the utility package; a test framework instantiates all classes for coverage; a serialization library targets the class.","solutions":["Use static methods: RegexUtils.isMobileExact(input), RegexUtils.isEmail(email). Never call new RegexUtils().","Exclude utility classes from DI scanning and serialization configs.","Mock static methods with mockito-inline for testing."],"exampleFix":"// before\nRegexUtils ru = new RegexUtils();\nboolean valid = ru.isEmail(\"a@b.com\");\n\n// after\nboolean valid = RegexUtils.isEmail(\"a@b.com\");","handlingStrategy":"type-guard","validationCode":"// RegexUtils is static-only\nboolean validEmail = RegexUtils.isEmail(\"test@example.com\");\nboolean validPhone = RegexUtils.isMobileExact(\"13800138000\");","typeGuard":"static boolean isStaticUtility(Class<?> c) {\n    return Modifier.isFinal(c.getModifiers()) && c.getSimpleName().endsWith(\"Utils\");\n}","tryCatchPattern":"try {\n    RegexUtils.class.getDeclaredConstructor().setAccessible(true);\n    RegexUtils.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 RegexUtils.isEmail(), isMobileExact(), etc. statically."],"tags":["java","android","utility-class","instantiation","regex"],"backgroundTag":null,"analyzedSha":"7b4caf9e5440046b3fefb63b6b6e2ead7ebaf809","analyzedAt":"2026-08-14T02:26:54.956Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}