Ваш текущий код использует следующую логику:
- Создать новый
simpoint
объект
- Ах, этот объект нуждается в
outputType
свойстве
- Инициализируйте свойство
outputType
как пустой dataType
объект
- Ух, мы не можем создать экземпляр абстрактного объекта - ошибка.
Вместо этого вы также можете использовать установщики и получатели для проверки типов данных. Это удаляет шаги 3 и 4 выше, поскольку начальное значение свойства будет []
.
classdef simpoint < matlab.mixin.SetGet
properties
outputType
end
methods
% ...
end
methods % Setters and getters
function set.outputType( obj, v )
% When the 'obj.outputType = X' is called, this function is
% triggered. We can validate the input first
assert( isa( v, 'dataType' ) );
% If the assertion didn't error, we can set the property
obj.outputType = v;
end
function v = get.outputType( obj )
% Nothing bespoke in the getter (no not strictly needed), just return the value
v = obj.outputType;
end
end
end
Для более информативной проверки вы можете использовать validateattributes
вместо assert
.
В этом случае значение по умолчанию outputType
будет []
, если вы не инициализируете его в конструкторе.
Обратите внимание, что, используя matlab.mixin.SetGet
для включения сеттеров и геттеров, я неявно сделал ваш объект handle
. В более широких терминах ООП объект теперь доступен «по ссылке», а не «по значению». Подробнее здесь .
Если вам не нужен дескриптор, вы можете удалить < matlab.mixin.SetGet
и, своим собственным комментарием, более четко определить установщик
function obj = set.outputType( obj, v )
% Have to return 'obj' if the class isn't a handle.
% ...
end