jjzjj

java - 断言空检查

断言语句应该保留用于测试并在生产中禁用,这似乎已被广泛接受,因为到那时错误应该已经解决,并且启用断言会影响性能。然而,对于带有if语句的空检查来说,肯定也是如此。为什么这段代码被认为适合生产if(x!=null){x.setId(idx);if(y!=null){if(y.id==x.id){x.doSth();}}else{//handleerror}}else{//handleerror}但这段代码不是?(假设启用断言)try{assert(x!=null);x.setId(idx);assert(y!=null);if(y.id==x.id){x.doSth();}}catch(

java - 如何在 java 类方法或构造函数中插入前置条件?

这是我正在学习的Java类(class)。这本书提到了前置条件和后置条件,但没有给出任何如何编写它们的示例。它继续谈论断言,我已经记下了,但我正在做的作业明确指出插入前提条件并使用断言测试前提条件。任何帮助都会很棒。 最佳答案 Eiffel等语言支持“前置条件”和“后置条件”作为语言的基本部分。可以提出一个令人信服的论点,即“对象构造函数”的全部目的正是建立“类不变”。但是对于Java(就像几乎所有其他后C++面向对象的语言一样),您几乎必须伪造它。这是一篇关于利用Java“断言”的优秀技术说明:http://docs.oracle

java - 为什么java中默认不启用assert

我的问题是从语言设计的角度。为什么assert的处理方式不同,即它引发错误而不是异常,默认情况下不启用等等。它看起来确实很优雅(非常主观的意见),易于阅读(再次主观)进行验证并且还有工具(IDE)可以对其进行实时评估并根据断言提供警告。 最佳答案 我想说的原因是Java的默认值适用于生产代码(软件的“发布”版本)——如果用户需要构建您的代码,他们将使用提供的默认值,如果您是开发人员并希望有更好的报告,你总是可以做出一些额外的努力。通常您不想在发布版本中发布断言。为什么?你总是可以设计你的代码来执行一些不打扰的后台错误处理并且在用户面

java - 在 assertEquals() 中使用正则表达式不起作用

我在assertEquals()语句中使用正则表达式时遇到问题。这是声明。Assert.assertEquals("regexp:*TST-*[0-9]{5}",driver.getTitle());但是我得到这个错误:org.junit.ComparisonFailure:expected:butwas:看起来正则表达式只是一个正在被比较的字符串。我错过了什么? 最佳答案 看起来您实际上并没有使用正则表达式。看起来这可能就是您想要做的?Assert.assertTrue(driver.getTitle().matches("*TS

java - 断言(假)与 RuntimeException?

我正在阅读XWalkUIClientInternal的来源我遇到了以下代码:switch(type){caseJAVASCRIPT_ALERT:returnonJsAlert(view,url,message,result);caseJAVASCRIPT_CONFIRM:returnonJsConfirm(view,url,message,result);caseJAVASCRIPT_PROMPT:returnonJsPrompt(view,url,message,defaultValue,result);caseJAVASCRIPT_BEFOREUNLOAD://ReuseonJsC

java - 在 Java 中使用断言进行编程

我想知道是否有很多人使用断言编写Java程序。我认为这对于没有足够书面契约(Contract)或过时契约(Contract)的大型项目非常有用。特别是当您使用网络服务、组件等时。但我从未见过任何项目使用断言(JUnit/testing测试中除外...)。我注意到抛出的类是一个错误而不是异常。他们为什么选择错误?会不会是因为异常可能被意外捕获并且没有记录/重新抛出?如果您使用组件开发应用程序,我想知道您将断言放在哪里:在组件方面,就在通过公共(public)API返回数据之前?在组件客户端?如果API在任何地方都被调用,那么您是否设置了一个将调用断言机制的外观模式?(那么我猜你把你的断言

java - 断言等于精度

我对assertEquals中的增量/精度感到困惑。我知道0.034会给我除法代码的精度,如下所示:publicvoidtestDivide(){assertEquals(3.0,Arithmetic.divide(12.0,4.0),0.0);assertEquals(3.3,Arithmetic.divide(10.0,3.0),0.034);//fail("Notyetimplemented");}但是,我尝试将其更改为0.03,测试失败。另一方面,当我将其更改为0.04时,它会成功,或者即使将其更改为0.034444等等,也会成功。我可以知道这个数字是什么意思,我们如何使用它?

java - 为什么断言不应该用于公共(public)方法中的参数检查?

嗯,在我有限的Java经验中,我从来没有真正使用过断言,并且想知道为什么我在很多网站和很多书上都阅读了处理断言的相同警告,即不应使用断言语句用于公共(public)方法中的参数检查?我想知道这是否与assert语句相对于Java中其他语句的执行顺序有关。 最佳答案 断言的目的是检查您的程序逻辑——断言失败是“停止一切——有错误!”适应症。特别是,断言失败表示“这里有错误”,但是“这里”是代码内部的某个地方,失败的原因只能真正确定通过检查您的代码(您的API用户不能也不应该这样做)。当您通过API获得错误数据时,您想表明“嘿!你给了我

java - 何时在客户端和通用 GWT 代码中使用断言

StackOverflow上有几个问题讨论了何时应该使用assert语句与抛出一些异常的问题。(示例here、here、here、here和here。但是,我开始怀疑断言与抛出的传统智慧是基于您在JVM中运行的假设。在GWT世界中,你的Java被音译为JavaScript并在浏览器的上下文中运行,权衡的集合感觉不同:在浏览器中运行时断言总是被编译掉,以及任何使你的JavaScript大小更小的东西这是一个胜利,特别是如果您的Web应用程序必须在手机上运行。然而,断言确实在DevMode中运行,因此它们在开发期间在那里具有实用性。所以我的问题是:有没有人考虑过一组最佳实践规则来管理如何在

java - 为什么不推荐使用 JUnit 4 中的 assertEquals(Object[], Object[])?

Eclipse向我发出警告,指出Assert类型的方法assertEquals(Object[],Object[])已弃用。我正在使用JUnit4。我在Eclipse中写了如下代码:importorg.junit.Test;importorg.junit.Assert;publicclassGenerics{publicT[]genericArraySwap(T[]list,intpos1,intpos2)throwsIndexOutOfBoundsException{...}@TestpublicvoidgenericArraySwapTest(){Integer[]IntegerL