我想在Android设备上使用assert obj != null : "object cannot be null"
。断言似乎不起作用,所以我在网上搜索,我找到了这个本地解决方案:
adb shell setprop debug.assert 1
它可以在我的本地机器上运行。
我想使用我的eclipse项目运行此命令(因此它将在源代码管理中)。 我该怎么办?
谢谢!
答案 0 :(得分:76)
Assert在Android中不起作用,因为大多数时候一个人没有在调试模式下运行,而是一些优化的代码。因此,正确的解决方案是手动抛出异常,代码如下:
if (obj==null) throw new AssertionError("Object cannot be null");
应该注意,通过设计,Asserts用于调试代码,而不是用于发布时代码。所以这可能不是抛出Assert的最佳方法。但这就是你如何做到的,所以......
答案 1 :(得分:13)
在Android 4.x设备上测试,可以在Android设备上使用Java断言:
现在你的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 命令行选项使断言可用
java -ea YourApp