JessYanCoding/AndroidAutoSize · error · java.lang.IllegalStateException
you can't instantiate me!
Error message
you can't instantiate me!
What it means
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.
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
Example fix
// before AutoSizeCompat compat = new AutoSizeCompat(); // after AutoSizeCompat.autoConvertDensity(activity, 360, true);
Defensive patterns
Strategy: try-catch
Validate before calling
if (Modifier.isPrivate(AutoSizeCompat.class.getDeclaredConstructor().getModifiers())) { /* use static facade methods */ } Type guard
boolean isUtilityClass(Class<?> c) { return Modifier.isPrivate(c.getDeclaredConstructors()[0].getModifiers()); } Try / catch
try { new AutoSizeCompat(); } catch (IllegalStateException e) { /* expected: static-only facade, call static methods */ } Prevention
- 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
When it happens
Trigger: Calling new AutoSizeCompat() or reflectively instantiating it.
Common situations: DI frameworks or test utilities that instantiate all classes in a package; misunderstanding the class as an adapter object rather than a static helper.
Related errors
- you can't instantiate me!
- you can't instantiate me!
- you can't instantiate me!
- you can't instantiate me!
- you should init first
AI-assisted analysis of JessYanCoding/AndroidAutoSize@e402ecdd99 (2026-09-07).
Data as JSON: /api/errors/5552fb84aa1cde2e.
Report an issue: GitHub.
Appendix: source
Thrown at autosize/src/main/java/me/jessyan/autosize/AutoSizeCompat.java:47
/**
* ================================================
* 当遇到本来适配正常的布局突然出现适配失效,适配异常等问题, 重写当前 {@link Activity} 的 {@link Activity#getResources()} 并调用
* {@link AutoSizeCompat} 的对应方法即可解决问题
* <p>
* Created by JessYan on 2018/8/8 19:20
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* ================================================
*/
public final class AutoSizeCompat {
private static SparseArray<DisplayMetricsInfo> mCache = new SparseArray<>();
private static final int MODE_SHIFT = 30;
private static final int MODE_MASK = 0x3 << MODE_SHIFT;
private static final int MODE_ON_WIDTH = 1 << MODE_SHIFT;
private static final int MODE_DEVICE_SIZE = 2 << MODE_SHIFT;
private AutoSizeCompat() {
throw new IllegalStateException("you can't instantiate me!");
}
/**
* 使用 AndroidAutoSize 初始化时设置的默认适配参数进行适配 (AndroidManifest 的 Meta 属性)
*
* @param resources {@link Resources}
*/
public static void autoConvertDensityOfGlobal(Resources resources) {
if (AutoSizeConfig.getInstance().isBaseOnWidth()) {
autoConvertDensityBaseOnWidth(resources, AutoSizeConfig.getInstance().getDesignWidthInDp());
} else {
autoConvertDensityBaseOnHeight(resources, AutoSizeConfig.getInstance().getDesignHeightInDp());
}
}
/**
* 使用 {@link Activity} 或 Fragment 的自定义参数进行适配
*View on GitHub (pinned to e402ecdd99)