所以,我想更多地了解二进制搜索,因为我真的不明白.二进制搜索需要一个数组排序的前提条件.我做对了吗?看起来一个方法应该检查这个前提条件并在不满足时抛出异常.但是,为什么检查前提条件是个坏主意?
我想使用Liquibase为列添加唯一约束.当然我想检查是否存在使用前置条件的重复行.
我想出来了:
<preConditions>
<sqlCheck expectedResult="0">
select count(*)
from person
having ( count(username) > 1 )
</sqlCheck>
</preConditions>
Run Code Online (Sandbox Code Playgroud)
然而,这产生Empty set于MySQL和其他数据库.
我试着用expectedResult=""和expectedResult="null",但都不起作用.
这是一个非常简单的问题,我经常在我的项目中使用com.google.common.base.Preconditions来验证参数和参数,例如:
Preconditions.checkNotNull(parameter, "message");
Preconditions.checkArgument(parameter > 0, "message");
此代码可能会产生IllegalArgumentException或NPE.但是我经常需要抛出自己的异常.我怎么能通过这个图书馆做到这一点?或者也许你可以建议另一个?先感谢您!
更新:我明白,我可以创建自己的简单实用程序类,但我很想找到现成的解决方案.请让我知道,如果有人知道这是可能的.
我正在编写一个必须符合前提条件的代码,如果条件都满足,那么它将返回true.我尝试了多个"if"语句,但这似乎不起作用.嵌套if语句似乎不是这里的答案,我不认为"else if"语句可行.我要问的是,这样做的正确方法是什么?我写if语句错了吗?
继承我的代码:
public static boolean isLegitimate(int mon, int day, int year){
// February has 29 days in any year evenly divisible by four,
// EXCEPT for centurial years which are not also divisible by 400.
// TODO 1: Check if a date is valid.
//checks to see if the months are between 1 and 12
if((mon >= 1) && (mon <= 12)) {
}
//checks to see if the years are greater than 1
if (year > 0){
} …Run Code Online (Sandbox Code Playgroud) 我正在阅读有关使用关键字验证方法前置条件和后置条件的Oracle 文档。assert
该文档说,可以使用assert关键字来验证public方法的后置条件,但您应该只使用assert关键字来验证private方法的前置条件。
为什么是这样?
我目前有 liquibase 先决条件的问题。仅当前提条件请求不回答 0 或 null 时,我才想插入一些内容……我解释说:
<changeSet id="myId" author="myName">
<preConditions onFail="MARK_RAN">
<sqlCheck expectedResult=????>SELECT COUNT(1) FROM tableB WHERE column2 IS NOT NULL;
</sqlCheck>
</preConditions>
<insert tableName="tableA">
<column name="column1" valueComputed="(SELECT columnA FROM tableB WHERE columnB IS NOT NULL;)" />
<column name="column2" valueComputed="(SELECT columnB FROM tableB WHERE columnB IS NOT NULL;)" />
</insert>
Run Code Online (Sandbox Code Playgroud)
我希望只有在第一个请求给我结果时才播放我的 changeSet。有没有办法在没有自定义前提条件的情况下做到这一点?
提前致谢
这个话题是有争议的,但是我相信,前提条件和类不变式应该由断言保护,如果违反了相应的SW组件的协定,则断言会终止程序-只要断言检查的运行时成本是不是性能瓶颈。
我真的很喜欢可选类型,并经常使用它们,但是对我而言,std :: optional的标准库实现目前不可用,因为首先对可选的取消引用不会执行检查其是否包含value,其次没有到目前为止,主要的c ++实现都在标准库函数中支持/实现断言。
从我多年来看到的std :: optional的使用中,我无法回忆起一个单个实例,其中std :: optional以这样的方式和数量使用,使得前提条件检查将成为性能瓶颈和令人望而却步。例如,我从未见过有人将遮罩图像实现为std:optional的数组。
我的问题:是否有提议(例如对于c ++ 22),它将合同功能添加到标准库中,特别是std :: optional?
是的,我知道异常会“保护” 值方法。首先,我不喜欢使用异常的非异常控制流(您是否曾经尝试调试过此类代码)。第二,我认为类型的强度和安全性应该通过其最弱的环节来判断。
我还不能发表评论,因此我在这里评论了Nicol Bolas的回答:
感谢您的回答,但坦率地说,我认为它不能回答我的问题。只是为了澄清。我不是在要求一项提议,要求对违反合同(“期望”关闭)的std :: abort进行调用。相反,我要问的是,在P0788提案之后,是否有任何计划将合同注释添加到标准库中。我同意该标准不应强制规定特定的实施方式应如何处理此类违约情况。
我有一个对象 myObject 并且我想确保它为空,否则我想用该对象的 id 打印一条自定义消息。我有以下代码行试图实现相同的
Preconditions.checkArgument(Objects.isNull(myObject),
"This object is not null #%s.", myObject.getId());
Run Code Online (Sandbox Code Playgroud)
当 myObject 不为空时,此条件工作正常。它抛出适当的异常消息。但是当对象确实为空时,我期望其余的代码将被执行,但由于 myObject.getId() 调用,我得到了一个空指针异常。
无论条件是否为真,番石榴前提条件都会评估异常消息字符串吗?
在liquibase的前提文档中我们可以看到下面的例子:
<preConditions>
<dbms type="oracle" />
<dbms type="mysql" />
</preConditions>
Run Code Online (Sandbox Code Playgroud)
当尝试使用 yaml 重新创建相同的规则时,它不起作用。
preConditions:
dbms:
type: oracle
dbms:
type: mysql
Run Code Online (Sandbox Code Playgroud)
我也尝试过类似的事情:
preConditions:
- dbms:
dbms:
type: oracle
dbms:
type: mysql
Run Code Online (Sandbox Code Playgroud)
我知道可以使用:
dbms:
type: oracle, mysql
Run Code Online (Sandbox Code Playgroud)
我总是收到这样的错误:
expected <block end>, but found BlockEntry
in 'reader', line X, column Y:
- dbms:
^
Run Code Online (Sandbox Code Playgroud)
如何在前提条件中使用多个 dbms?
我正在尝试根据自己的 ada 前后条件进行学习。