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
- Use static methods: VibrateUtils.vibrate(ms) (with VIBRATE permission held) instead of constructing.
- Provide a Gson InstanceCreator / Jackson mixin returning a sentinel so the constructor is not invoked.
- Use Mockito.mockStatic for mocking rather than constructing VibrateUtils.
- 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
- Call VibrateUtils.vibrate(...) statically; hold the VIBRATE permission.
- Register InstanceCreator/mixin for JSON fields.
- Use Mockito.mockStatic for mocking.
- Keep final + private constructor.
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
- u can't instantiate me...
- u can't instantiate me...
- u can't instantiate me...
- u can't instantiate me...
- u can't instantiate me...
AI-assisted analysis of Blankj/AndroidUtilCode@7b4caf9e54 (2026-08-14).
Data as JSON: /api/errors/d6cf8ceff2c58508.
Report an issue: GitHub.