如何在Android中使用断言?
我想在Android设备上使用assert obj != null : "object cannot be null"
。 断言似乎不工作,所以我在网上search,我发现这个本地解决scheme:
adb shell setprop debug.assert 1
它在我的本地机器上工作。
我想运行这个命令使用我的eclipse项目(所以它会在源代码pipe理中)。 我该怎么做?
谢谢!
断言在Android中不起作用,因为大部分时间一个人没有在debugging模式下运行,而是一些优化的代码。 因此,正确的解决scheme是手动抛出一个exception,代码如下:
if (obj==null) throw new AssertionError("Object cannot be null");
应该注意,通过devise,断言是用于debugging代码的,而不是用于发布时间代码的。 所以这可能不是最好的使用抛出一个断言。 但是,你仍然可以这样做,所以…
在Android 4.x设备上testing,可以在Android设备上使用Java声明:
- 编辑/system/build.prop(例如通过X-plore ),在文件末尾添加行:debug.assert = 1
- 重新启动手机
现在你的Android设备是合理的断言检查,并且会在断言检查失败时抛出AssertionError。
编辑:
另一个简单的方法是,启用从PC直到设备重新启动:
platform-tools\adb shell setprop debug.assert 1
例如,您可以创build一个.bat文件(在Windows上)并在连接设备时运行它。
if (somevar == null) throw new RuntimeException();
将RuntimeException()replace为适当的exception子types。
创build你自己的断言方法:
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); } } }
希望能帮助到你!