I have a class Foo
and a function that gets Foo
as input parameter. In this function I also do some error checking using isa
:
function (x)
if ~isa(x,'Foo')
error('Wrong!');
end
I want to pass it something that is like null in Java. However when I pass it []
I get an error. Can you tell me what can I do? I though about always passing a cell array or checking for empty
everytime I use isa
.
First of all, you can check our condition with
validParam = isa(x,'Foo') || isempty(x);
However, the best way will be to create an empty class using the static method empty
:
e = Foo.empty(0);
isa(x,'Foo')
And the result is:
isa(Foo.empty(0),'Foo')
ans =
1
By the way, this is also useful for another case - Suppose you want to grow dynamically and array of Foo
objects. You could use a cell array, but then you lose the type safety. Instead, create Foo.empty()
.
Nevertheless, there is a caveeat in using this method. It is not smart enough to handle inheritance -
Let Bar
be a class that inherits from Foo
.
classdef Bar < Foo
end
And you allocate a new array of Foo
objects:
x = Foo.empty(0)
x =
0x0 empty Foo with no properties.
Methods
Then try to add Bar
:
x(end+1) = Bar()
??? The following error occurred converting from Bar to Foo: Error using ==> Foo Too many input arguments.
So the only workaround for this case is to use cell array.
Edit(1): It seems that Matlab have added a special class in order to handle inheritance:
Description
matlab.mixin.Heterogeneous is an abstract class that provides support for the formation of heterogeneous arrays. A heterogeneous array is an array of objects that differ in their specific class, but are all derived from or are instances of a root class. The root class derives directly from matlab.mixin.Heterogeneous.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With