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

  1. Call the static methods (e.g. AutoSizeCompat.autoConvertDensity(...)) directly
  2. Remove any instantiation attempt of AutoSizeCompat
  3. 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

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


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)