Blankj/AndroidUtilCode · error · UnsupportedOperationException

u can't instantiate me...

Error message

u can't instantiate me...

What it means

VibrateUtils is a final static-only utility for device vibration, holding a static Vibrator reference. Its private constructor throws UnsupportedOperationException to prevent instantiation. All public methods (vibrate, cancel, getVibrator) are static.

Source

Thrown at lib/utilcode/src/main/java/com/blankj/utilcode/util/VibrateUtils.java:26

import androidx.annotation.RequiresApi;
import androidx.annotation.RequiresPermission;

import static android.Manifest.permission.VIBRATE;

/**
 * <pre>
 *     author: Blankj
 *     blog  : http://blankj.com
 *     time  : 2016/09/29
 *     desc  : utils about vibrate
 * </pre>
 */
public final class VibrateUtils {

    private static Vibrator vibrator;

    private VibrateUtils() {
        throw new UnsupportedOperationException("u can't instantiate me...");
    }

    /**
     * Vibrate.
     * <p>Must hold {@code <uses-permission android:name="android.permission.VIBRATE" />}</p>
     *
     * @param milliseconds The number of milliseconds to vibrate.
     */
    @RequiresPermission(VIBRATE)
    public static void vibrate(final long milliseconds) {
        Vibrator vibrator = getVibrator();
        if (vibrator == null) return;
        vibrator.vibrate(milliseconds);
    }

    /**
     * Vibrate.
     * <p>Must hold {@code <uses-permission android:name="android.permission.VIBRATE" />}</p>

View on GitHub (pinned to 7b4caf9e54)

Solutions

  1. Use static methods: VibrateUtils.vibrate(ms) (with VIBRATE permission held) instead of constructing.
  2. Provide a Gson InstanceCreator / Jackson mixin returning a sentinel so the constructor is not invoked.
  3. Use Mockito.mockStatic for mocking rather than constructing VibrateUtils.
  4. Keep the class final with a private constructor.

Example fix

// before
VibrateUtils vu = new VibrateUtils();

// after
VibrateUtils.vibrate(200);
Defensive patterns

Strategy: validation

Validate before calling

if (Modifier.isFinal(VibrateUtils.class.getModifiers())) {
  throw new IllegalStateException("VibrateUtils is static-only.");
}

Prevention

When it happens

Trigger: Reflective instantiation via VibrateUtils.class.getDeclaredConstructor().setAccessible(true).newInstance(), or transitively through Gson/Jackson deserialization, Mockito/PowerMock, Kotlin reflection, or a DI classpath scan.

Common situations: Serialization frameworks binding a field to VibrateUtils; mock frameworks in tests; coverage probes; accidental `new VibrateUtils()` after weakening modifiers.

Related errors


AI-assisted analysis of Blankj/AndroidUtilCode@7b4caf9e54 (2026-08-14). Data as JSON: /api/errors/d6cf8ceff2c58508. Report an issue: GitHub.