{"record":{"id":"4acd6f622d019772","repo":"JessYanCoding/AndroidAutoSize","slug":"you-can-t-instantiate-me","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/AutoSize.java","lineNumber":60,"sourceCode":" * 自定义 {@link View} 都会达到适配的效果, 如果某个页面不想使用适配请让该 {@link Activity} 实现 {@link CancelAdapt}\n * <p>\n * 任何方案都不可能完美, 在成本和收益中做出取舍, 选择出最适合自己的方案即可, 在没有更好的方案出来之前, 只有继续忍耐它的不完美, 或者自己作出改变\n * 既然选择, 就不要抱怨, 感谢 今日头条技术团队 和 张鸿洋 等人对 Android 屏幕适配领域的的贡献\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 AutoSize {\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 AutoSize() {\n        throw new IllegalStateException(\"you can't instantiate me!\");\n    }\n\n    /**\n     * 检查 AndroidAutoSize 是否已经初始化\n     *\n     * @return {@code false} 表示 AndroidAutoSize 还未初始化, {@code true} 表示 AndroidAutoSize 已经初始化\n     */\n    public static boolean checkInit() {\n        return AutoSizeConfig.getInstance().getInitDensity() != -1;\n    }\n\n    /**\n     * 由于 AndroidAutoSize 会通过 {@link InitProvider} 的实例化而自动完成初始化, 并且 {@link AutoSizeConfig#init(Application)}\n     * 只允许被调用一次, 否则会报错, 所以 {@link AutoSizeConfig#init(Application)} 的调用权限并没有设为 public, 不允许外部使用者调用\n     * 但由于某些 issues 反应, 可能会在某些特殊情况下出现 {@link InitProvider} 未能正常实例化的情况, 导致 AndroidAutoSize 未能完成初始化\n     * 所以提供此静态方法用于让外部使用者在异常情况下也可以初始化 AndroidAutoSize, 在 {@link Application#onCreate()} 中调用即可\n     *\n     * @param application {@link Application}","sourceCodeStart":42,"sourceCodeEnd":78,"githubUrl":"https://github.com/JessYanCoding/AndroidAutoSize/blob/e402ecdd998ea07549513ac08c12e9f097f3b48c/autosize/src/main/java/me/jessyan/autosize/AutoSize.java#L42-L78","documentation":"AutoSize is a static utility class for the AndroidAutoSize screen-adaptation library; its constructor is intentionally private and throws IllegalStateException to forbid instantiation. All entry points (AutoSize.init, autoConvertDensity, etc.) are static, so creating an instance is always a programming mistake.","triggerScenarios":"Calling new AutoSize() (directly or via reflection) instead of using the static methods on the class.","commonSituations":"Developers copying 'new SomeHelper()' patterns, dependency-injection containers or code generators attempting to instantiate every class, or reflection-based tests instantiating classes with private constructors.","solutions":["Use the static methods directly, e.g. AutoSize.initCompat(application), never construct the class","Remove any 'new AutoSize()' call or reflection-based instantiation","Wrap reflective instantiation in try-catch or skip classes that are static utility holders"],"exampleFix":"// before\nAutoSize autoSize = new AutoSize();\n// after\nAutoSize.initCompat(application);","handlingStrategy":"try-catch","validationCode":"if (Modifier.isPrivate(AutoSize.class.getDeclaredConstructor().getModifiers())) { /* utility class: use statics */ }","typeGuard":"boolean isUtilityClass(Class<?> c) { return Modifier.isPrivate(c.getDeclaredConstructors()[0].getModifiers()); }","tryCatchPattern":"try { ctor = AutoSize.class.getDeclaredConstructor(); ctor.setAccessible(true); ctor.newInstance(); } catch (InvocationTargetException e) { Throwable cause = e.getCause(); /* IllegalStateException: intended design, use static methods */ }","preventionTips":["Treat classes with only static members as non-instantiable","Don't add static utility classes to DI instantiation graphs","Check for a private throwing constructor before reflective instantiation"],"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"}