如何在机器人中使用断言?

我想在 Android 设备上使用 assert obj != null : "object cannot be null"。这个断言似乎不起作用,所以我在网上搜索,找到了这个本地解决方案:

断言1

它在我的本地机器上确实有用。

我希望使用我的 Eclipse 项目运行这个命令(这样它就在源代码控制中)。 我该怎么做?

74465 次浏览

if (somevar == null) throw new RuntimeException();

用适当的异常子类型替换 RuntimeException ()。

断言不能在 Android 中工作,因为大多数情况下人们不是在调试模式下运行,而是在一些优化的代码中运行。因此,正确的解决方案是手动抛出异常,代码如下:

if (obj==null) throw new AssertionError("Object cannot be null");

应该注意的是,根据设计,Asserts 用于调试代码,而不是用于发布时间代码。所以这可能不是抛出 Assert 的最佳用途。但你还是可以这么做,所以..。

在 Android 4.x 设备上测试,可以在 Android 设备上使用 Java 断言:

  • 编辑/system/build.prop (例如,通过 X-plore) ,在文件末尾添加一行: debug
  • 重启手机

现在您的 Android 设备可以明智地断言检查,并且当断言检查失败时会抛出 AssertionError。

编辑:

另一种简单的方法,在设备重新启动之前从 PC 启用断言:

platform-tools\adb shell setprop debug.assert 1

例如,您可以创建一个.bat 文件(在 Windows 上) ,并在附加设备时运行它。

创建您自己的断言方法:

public static <T> T assertNotNull(T object) {
if (object == null)
throw new AssertionError("Object cannot be null");
return object;
}

返回相同的对象允许在赋值中使用该对象以简洁。

分享我的类,我用它在 Android 上进行断言,它更简单,有很好的命名和非常优雅,因为它允许你像下面这样编写断言:

Assert.that(obj!=null, "Object should not be null");

下面是该类的代码:

public class Assert {
public static void that(boolean condition, String message) {
if (!condition) {
throw new AssertionError(message);
}
}
}

希望能有帮助!

要使断言在 Java 虚拟机中可用,请使用 -使能断言或 -< em > ea 命令行选项

  • 在窗口的命令提示符下,

    Java-ea YourApp

  • 在 Android Studio 3.0上,在 工具/编辑配置/VM 选项上,输入-使能断言或-< em > ea