Java 避免在android中使用断言

Java 避免在android中使用断言,java,android,Java,Android,我正在做一个Android应用程序。我的客户要求我在Android代码中包含断言。我在谷歌上搜索发现,在Android代码中应该避免使用断言的Commonware。但我需要一个强有力的理由来说明为什么要避免使用断言? 请告诉我是否应该使用断言。如果应该,在android中使用断言的规则或建议是什么。这样的断言有什么意义? 在一个生产代码声明中,它们不会起到多大作用,它们只会检测到为什么您认为的不变量不是您所期望的,但它不会阻止您的应用程序崩溃。 此外,Assert类是junit.framewor

我正在做一个Android应用程序。我的客户要求我在Android代码中包含断言。我在谷歌上搜索发现,在Android代码中应该避免使用断言的Commonware。但我需要一个强有力的理由来说明为什么要避免使用断言?
请告诉我是否应该使用断言。如果应该,在android中使用断言的规则或建议是什么。

这样的断言有什么意义?
在一个生产代码声明中,它们不会起到多大作用,它们只会检测到为什么您认为的不变量不是您所期望的,但它不会阻止您的应用程序崩溃。
此外,Assert类是junit.framework.Assert的一部分,它在这里用于单元测试。
因此,建立单元测试来测试这些不变量是一种更好的做法,这样,当未来的开发破坏它们时,您可以采取行动。

这样的断言有什么意义?
在一个生产代码声明中,它们不会起到多大作用,它们只会检测到为什么您认为的不变量不是您所期望的,但它不会阻止您的应用程序崩溃。
此外,Assert类是junit.framework.Assert的一部分,它在这里用于单元测试。 因此,建立单元测试来测试这些不变量是一种更好的实践方式,这样当将来的开发破坏它们时,您就可以采取行动

但我需要一个强有力的理由来解释为什么要避免使用断言

断言有意引入未处理的、不可修补的错误(
AssertionError

。您必须专门启用它们。这意味着无论您试图通过断言验证什么逻辑,都不会在生产设备上使用

因此,我同意:

步骤零:将注释重构为断言

第一步:将断言从代码中重构到单元测试中

步骤三:将其余断言升级为程序异常

因此,当然欢迎您验证输入、确认输出等。只是不要使用
assert
。相反,用其他方式处理这种情况。如果没有其他异常,抛出一个
RuntimeException
,就像抛出一个
IllegalArgumentException
,这样您的顶级未处理异常逻辑就可以得到控制

只要在互联网上进行一次简单的搜索,就会发现许多关于断言与异常选择的文章,例如:

但我需要一个强有力的理由来解释为什么要避免使用断言

断言有意引入未处理的、不可修补的错误(
AssertionError

。您必须专门启用它们。这意味着无论您试图通过断言验证什么逻辑,都不会在生产设备上使用

因此,我同意:

步骤零:将注释重构为断言

第一步:将断言从代码中重构到单元测试中

步骤三:将其余断言升级为程序异常

因此,当然欢迎您验证输入、确认输出等。只是不要使用
assert
。相反,用其他方式处理这种情况。如果没有其他异常,抛出一个
RuntimeException
,就像抛出一个
IllegalArgumentException
,这样您的顶级未处理异常逻辑就可以得到控制

只要在互联网上进行一次简单的搜索,就会发现许多关于断言与异常选择的文章,例如:


assert
是一个Java关键字,如果断言失败,将触发一个
AssertionError
assert
是一个Java关键字,如果断言失败,将触发一个
AssertionError
。也许你的客户想要你做单元测试?他们是技术人员吗?@MaciejGórski不,他们不是。然后我建议问他们真正想要什么,因为我们的编程世界和“正常”世界可能会使用不同含义的断言。这里提供的答案很好,但我不会在与非技术人员交谈时使用。@MaciejGórski no实际上在技术方面是技术性的,但在Android方面不是技术性的。也许您的客户希望您进行单元测试?他们是技术人员吗?@MaciejGórski不,他们不是。然后我建议问他们真正想要什么,因为我们的编程世界和“正常”世界可能会使用不同含义的断言。这里提供的答案很好,但我不会在与非技术人员交谈时使用它们。@MaciejGórski no实际上在技术方面是技术性的,但在Android方面不是技术性的。当代码中没有固有的结果检查时,Java不建议使用断言检查私有方法吗?为什么这只在android上会有所不同?@Rarw:“有效的Java不建议使用断言吗”--如果那本书的作者这样做了,那么我和其他人不同意该作者的观点。“为什么只有在android上才会有所不同?”——事实并非如此,只是断言被禁用了。我的答案包含了与标准Java(而非Android)中使用断言不一致的材料的超链接。当代码中没有固有的结果检查时,有效的Java不建议使用断言来检查私有方法吗?为什么这只在android上会有所不同?@Rarw:“有效的Java不建议使用断言吗”--如果那本书的作者这样做了,那么我和其他人不同意该作者的观点。“为什么只有在android上才会有所不同?”——事实并非如此,只是断言被禁用了。我的答案包含指向与标准Java(而非Android)中断言使用不一致的材料的超链接。