主要内容

验证属性值

在类定义属性验证

MATLAB®属性使您能够验证特定属性值的限制。您可以使用验证限制类和属性值的大小。此外,您可以使用函数来建立属性值必须符合标准。MATLAB定义了一组验证功能,您可以编写自己的验证功能。

使用属性在类定义中验证是可选的。

额外的属性验证信息

有关属性的更多信息验证,看看属性类和尺寸验证,属性验证功能,元数据接口属性验证

验证语法

下面的代码显示了中突出显示的区域属性的语法验证。

属性验证包括下列:

  • 大小,每个维度的长度指定为一个正整数或冒号。一个冒号表明任何尺寸的长度是允许的。分配给该属性的值必须符合指定的大小或符合指定的大小。有关更多信息,请参见财产规模验证

  • 一个MATLAB类的类的名称。分配给该属性的值必须是指定类的或可兑换指定的类。使用MATLAB类或外部定义的类,由MATLAB支持,除了Java金宝app®和COM类。有关更多信息,请参见房地产类验证

  • 函数——一个以逗号分隔的验证函数名。MATLAB将分配给属性的值传递给每个验证函数在应用任何可能的类和大小转换。如果验证失败,验证器函数抛出错误但不返回值。有关更多信息,请参见属性验证功能

    MATLAB验证函数的列表,请参阅属性验证功能

使用属性的验证

使用属性验证公共属性来控制用户代码分配给属性的值。

如果你想限制属性值一组固定的标识,这些标识符创建一个枚举类,限制这个类的属性。枚举类的信息,请参阅定义枚举类

MATLAB类型转换规则适用于财产的验证。例如,MATLAB可以强迫从一个到另一个数字类型。因此,限制特定的数值类型的属性值,如双并不妨碍其他数值类型财产的分配。

确保属性只能被分配一个特定类型的价值,限制财产类型,只支持所需的类型转换或使用验证函数指定的类允许属性而不是指定属性类型。金宝appMATLAB计算规范在执行任何验证函数类型。有关更多信息,请参见订单的验证

指定有效的默认

确保任何默认值分配给指定的属性满足限制的验证。如果你不指定一个默认值,MATLAB创建一个默认值被分配一个空对象的指定类或通过调用默认构造函数,如果大小限制不允许使用一个空的默认值。默认构造函数必须返回一个对象的正确的大小。

样本类使用属性验证

ValidateProps类定义了三个属性与验证。

classdefValidateProps属性位置(3)双{mustBeReal, mustBeFinite}标签(:1)字符{mustBeMember(标签,{‘高’,‘中等’,‘低’})}=“低”状态(1,1)matlab.lang.OnOffSwitchState结束结束
  • 位置必须是一个数组1×3的课吗其值是真实的,有限的数字。

  • 标签必须是一个字符向量是“高”,“媒介”,或“低”

  • 状态必须是一个枚举的成员吗matlab.lang.OnOffSwitchState类()。

验证在实例化

创建一个对象ValidateProps类对隐式和显式执行验证默认值:

一个= ValidateProps
a = ValidateProps属性:位置:[0 0 0]标签:“低”状态:

在创建对象时,MATLAB:

  • 初始化位置属性值对(0 0 0)满足的大小和类需求。

  • 设置标签属性默认值,“低”。默认值必须允许的值集的成员。空字符隐式的默认值将导致一个错误。

  • 设置状态财产枚举成员定义的matlab.lang.OnOffSwitchState类。

MATLAB选择默认值的信息,请参阅每个大小和类的默认值

订单的验证

分配一个值时,房地产,包括在类定义中指定的默认值,MATLAB在这个订单执行验证:

  • ——这类验证验证会导致转换到不同的类中,如转换的字符字符串。任务属性遵循MATLAB转换规则阵列。

  • 验证——这验证可能导致大小转换,如标量扩张或一个列向量转换成一个行向量。任务属性指定一个尺寸验证行为一样分配任何MATLAB数组。索引分配的信息,请参阅数组索引

  • 验证器功能——MATLAB将类和尺寸验证的结果传递给每个验证功能,从左到右的顺序。一个错误可能发生在所有验证功能被称为之前,验证结束的过程。

  • 设置方法——MATLAB执行属性验证调用属性集方法之前,如果一个人的属性定义。任务属性在属性设置或获取方法不适用再次验证。通常,您可以使用属性验证替换属性集的方法。

属性验证错误

ValueProp类使用大小、类和功能验证,以确保一个作业价值属性是一个双标量这并不是负面的。

classdefValueProp属性价值(1,1)双{mustBeNonnegative}= 0结束结束

这个声明试图单元阵列分配给属性。这类作业违反了验证。

一个。值= {10 20};
错误设定属性的“价值”类“ValueProp”:无效的数据类型。值必须是双或可转换双。

这个声明试图1×2双数组分配给属性。这个任务违反了尺寸验证。

一个。值= 20 [10];
错误设定属性的“价值”类“ValueProp”:必须标量值的大小。

这个声明试图分配一个标量双重属性。这个任务失败的功能验证,这就需要一个非负数字。

一个。值= -10;
错误设置属性的“价值”类“ValueProp”:值必须是负的。

验证过程结束时,遇到的第一个错误。

抽象属性的验证

您可以定义属性验证抽象的属性。验证适用于所有子类实现财产。然而,子类不能使用任何验证实施的产权。验证属性的多个类继承时,只有一个抽象的属性在一个超类可以定义验证。所有的抽象超类可以定义属性。

对象时不更新变化的验证

如果你改变类的对象属性验证而存在,MATLAB不会尝试应用新的验证现有的属性值。然而,MATLAB应用新验证当你做作业的现有对象的属性。

验证在加载操作

当一个对象保存到MATLAB文件,保存所有的默认属性值的对象。当加载对象,MATLAB恢复这些属性值在新创建的对象。

如果类定义更改属性验证,加载属性值不再有效,MATLAB替代当前定义默认的属性值。然而,负载功能抑制的验证错误发生之前分配默认值从当前的类定义。因此,验证错误时默默地忽略负载操作。

为了说明这种行为,这个例子创建,保存和加载的对象MonthTemp类。这类限制AveTemp产权单元阵列。

classdefMonthTemp属性AveTemp细胞结束结束

创建一个MonthTemp对象和赋值AveTemp财产。

一个= MonthTemp;一个。AveTemp = {“可能”70};

保存对象使用保存

保存TemperatureFile一个

编辑属性定义更改的验证类AveTemp房地产从单元阵列containers.Map

classdefMonthTemp属性AveTempcontainers.Map结束结束

加载已保存的对象与新的类定义在MATLAB的道路。MATLAB不能分配保存的价值AveTemp房地产由于单元阵列,{‘可能’,70}不兼容属性值是一个当前的要求containers.Map对象。MATLAB不能单元阵列转换为containers.Map

解决不相容,MATLAB设置AveTemp属性加载对象的当前的默认值,这是一个空的containers.Map对象。

负载TemperatureFile一个一个。AveTemp ans =地图属性:数:0 KeyType: char ValueType:任何

加载对象分配给有不同的价值AveTemp财产因为现在保存的值是无效的。然而,加载过程中抑制验证错误。

防止数据丢失时改变类定义和重新加载对象,实现一个loadobj方法或类转换方法,使保存的值,以满足当前属性的有效性。

保存和加载对象的更多信息,看一下保存和加载过程对象

相关的话题