{"record":{"id":"3d3c95e5f3c57483","repo":"Blankj/AndroidUtilCode","slug":"u-can-t-instantiate-me-3d3c95","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/MetaDataUtils.java","lineNumber":24,"sourceCode":"import android.content.ComponentName;\nimport android.content.pm.ActivityInfo;\nimport android.content.pm.ApplicationInfo;\nimport android.content.pm.PackageManager;\nimport android.content.pm.ServiceInfo;\nimport androidx.annotation.NonNull;\n\n/**\n * <pre>\n *     author: Blankj\n *     blog  : http://blankj.com\n *     time  : 2018/05/15\n *     desc  : utils about meta-data\n * </pre>\n */\npublic final class MetaDataUtils {\n\n    private MetaDataUtils() {\n        throw new UnsupportedOperationException(\"u can't instantiate me...\");\n    }\n\n    /**\n     * Return the value of meta-data in application.\n     *\n     * @param key The key of meta-data.\n     * @return the value of meta-data in application\n     */\n    public static String getMetaDataInApp(@NonNull final String key) {\n        String value = \"\";\n        PackageManager pm = Utils.getApp().getPackageManager();\n        String packageName = Utils.getApp().getPackageName();\n        try {\n            ApplicationInfo ai = pm.getApplicationInfo(packageName, PackageManager.GET_META_DATA);\n            value = String.valueOf(ai.metaData.get(key));\n        } catch (PackageManager.NameNotFoundException e) {\n            e.printStackTrace();\n        }","sourceCodeStart":6,"sourceCodeEnd":42,"githubUrl":"https://github.com/Blankj/AndroidUtilCode/blob/7b4caf9e5440046b3fefb63b6b6e2ead7ebaf809/lib/utilcode/src/main/java/com/blankj/utilcode/util/MetaDataUtils.java#L6-L42","documentation":"MetaDataUtils is a final utility class providing static methods for reading Android manifest meta-data values (getMetaDataInApp, getMetaDataInActivity). 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 calls via Constructor.newInstance().","commonSituations":"Component scanning traverses the utility package; a test runner instantiates all classes in a package for coverage; a serialization library targets the class for deserialization.","solutions":["Use static methods: MetaDataUtils.getMetaDataInApp(key). Never call new MetaDataUtils().","Exclude utility classes from DI scanning and serialization configs.","Mock static methods with mockito-inline for testing."],"exampleFix":"// before\nMetaDataUtils mdu = new MetaDataUtils();\nString val = mdu.getMetaDataInApp(\"api_key\");\n\n// after\nString val = MetaDataUtils.getMetaDataInApp(\"api_key\");","handlingStrategy":"type-guard","validationCode":"// MetaDataUtils is static-only\nString value = MetaDataUtils.getMetaDataInApp(\"com.google.android.gms.version\");","typeGuard":"static boolean isStaticUtility(Class<?> c) {\n    return Modifier.isFinal(c.getModifiers()) && c.getSimpleName().endsWith(\"Utils\");\n}","tryCatchPattern":"try {\n    MetaDataUtils.class.getDeclaredConstructor().setAccessible(true);\n    MetaDataUtils.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 static methods: MetaDataUtils.getMetaDataInApp(), etc."],"tags":["java","android","utility-class","instantiation","metadata"],"backgroundTag":null,"analyzedSha":"7b4caf9e5440046b3fefb63b6b6e2ead7ebaf809","analyzedAt":"2026-08-14T02:26:54.956Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}