如何在android中使用assert?

时间:2011-05-30 12:43:52

标签: java android assert

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

  

adb shell setprop debug.assert 1

它可以在我的本地机器上运行。

我想使用我的eclipse项目运行此命令(因此它将在源代码管理中)。 我该怎么办?

谢谢!

6 个答案:

答案 0 :(得分:76)

Assert在Android中不起作用,因为大多数时候一个人没有在调试模式下运行,而是一些优化的代码。因此,正确的解决方案是手动抛出异常,代码如下:

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

应该注意,通过设计,Asserts用于调试代码,而不是用于发布时代码。所以这可能不是抛出Assert的最佳方法。但这就是你如何做到的,所以......

答案 1 :(得分:13)

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

  • 编辑/system/build.prop(例如X-plore),在文件末尾添加行:debug.assert = 1
  • 重新启动手机

现在你的Android设备对断言检查是明智的,并且在断言检查失败时会抛出AssertionError。

编辑:

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

platform-tools\adb shell setprop debug.assert 1

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

答案 2 :(得分:9)

创建自己的断言方法:

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

为简洁起见,返回相同的对象允许在赋值中使用它。

答案 3 :(得分:6)

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

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

答案 4 :(得分:2)

我在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);
        }
    }
}

希望它有所帮助!

答案 5 :(得分:1)

要在Java虚拟机中使用 - enableassertions 或 - ea 命令行选项使断言可用

  • 在Window的命令提示符下,
      

    java -ea YourApp

  • 在Android Studio 3.0上,工具/编辑配置/ VM选项,输入 - 启用声明 或 - ea