{"record":{"id":"5552fb84aa1cde2e","repo":"JessYanCoding/AndroidAutoSize","slug":"you-can-t-instantiate-me-5552fb","errorCode":null,"errorMessage":"you can't instantiate me!","messagePattern":"you can't instantiate me!","errorType":"exception","errorClass":"java.lang.IllegalStateException","httpStatus":null,"severity":"error","filePath":"autosize/src/main/java/me/jessyan/autosize/AutoSizeCompat.java","lineNumber":47,"sourceCode":"/**\n * ================================================\n * 当遇到本来适配正常的布局突然出现适配失效，适配异常等问题, 重写当前 {@link Activity} 的 {@link Activity#getResources()} 并调用\n * {@link AutoSizeCompat} 的对应方法即可解决问题\n * <p>\n * Created by JessYan on 2018/8/8 19:20\n * <a href=\"mailto:jess.yan.effort@gmail.com\">Contact me</a>\n * <a href=\"https://github.com/JessYanCoding\">Follow me</a>\n * ================================================\n */\npublic final class AutoSizeCompat {\n    private static SparseArray<DisplayMetricsInfo> mCache = new SparseArray<>();\n    private static final int MODE_SHIFT = 30;\n    private static final int MODE_MASK  = 0x3 << MODE_SHIFT;\n    private static final int MODE_ON_WIDTH  = 1 << MODE_SHIFT;\n    private static final int MODE_DEVICE_SIZE  = 2 << MODE_SHIFT;\n\n    private AutoSizeCompat() {\n        throw new IllegalStateException(\"you can't instantiate me!\");\n    }\n\n    /**\n     * 使用 AndroidAutoSize 初始化时设置的默认适配参数进行适配 (AndroidManifest 的 Meta 属性)\n     *\n     * @param resources {@link Resources}\n     */\n    public static void autoConvertDensityOfGlobal(Resources resources) {\n        if (AutoSizeConfig.getInstance().isBaseOnWidth()) {\n            autoConvertDensityBaseOnWidth(resources, AutoSizeConfig.getInstance().getDesignWidthInDp());\n        } else {\n            autoConvertDensityBaseOnHeight(resources, AutoSizeConfig.getInstance().getDesignHeightInDp());\n        }\n    }\n\n    /**\n     * 使用 {@link Activity} 或 Fragment 的自定义参数进行适配\n     *","sourceCodeStart":29,"sourceCodeEnd":65,"githubUrl":"https://github.com/JessYanCoding/AndroidAutoSize/blob/e402ecdd998ea07549513ac08c12e9f097f3b48c/autosize/src/main/java/me/jessyan/autosize/AutoSizeCompat.java#L29-L65","documentation":"AutoSizeCompat is a static compatibility facade over AutoSize; its private constructor throws IllegalStateException to prevent instantiation. It exposes only static methods such as autoConvertDensity and customDensity.","triggerScenarios":"Calling new AutoSizeCompat() or reflectively instantiating it.","commonSituations":"DI frameworks or test utilities that instantiate all classes in a package; misunderstanding the class as an adapter object rather than a static helper.","solutions":["Call the static methods (e.g. AutoSizeCompat.autoConvertDensity(...)) directly","Remove any instantiation attempt of AutoSizeCompat","Suppress instantiation attempts in DI/generator configs for static utility classes"],"exampleFix":"// before\nAutoSizeCompat compat = new AutoSizeCompat();\n// after\nAutoSizeCompat.autoConvertDensity(activity, 360, true);","handlingStrategy":"try-catch","validationCode":"if (Modifier.isPrivate(AutoSizeCompat.class.getDeclaredConstructor().getModifiers())) { /* use static facade methods */ }","typeGuard":"boolean isUtilityClass(Class<?> c) { return Modifier.isPrivate(c.getDeclaredConstructors()[0].getModifiers()); }","tryCatchPattern":"try { new AutoSizeCompat(); } catch (IllegalStateException e) { /* expected: static-only facade, call static methods */ }","preventionTips":["Always use AutoSizeCompat's static methods for API < 19 compatibility paths","Never register static facades as injectable components","Document utility classes as final/static-only"],"tags":["java","static-class","illegal-state"],"backgroundTag":"invalid-constructor-argument","analyzedSha":"e402ecdd998ea07549513ac08c12e9f097f3b48c","analyzedAt":"2026-09-07T15:05:42.094Z","contentChangedAt":"2026-09-07T15:05:42.094Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}