2012-01-18 8 views
5

私はクラスFooと入力パラメータとしてFooを取得する関数を持っています。この機能では、私はまた、いくつかのエラーがisaを使用してチェックします:matlabでnull参照を渡すと、isaはtrueを返します。

function (x) 
    if ~isa(x,'Foo') 
    error('Wrong!'); 
    end 

私はそれをJavaでヌルのようなものであるものを渡したいです。しかし、私がそれを渡すとき[]私はエラーが発生します。何ができるのですか教えていただけますか?私は常にisaを使用するたびに、セル配列を渡すか、emptyをチェックします。

答えて

9

まず第一に、あなたは

validParam = isa(x,'Foo') || isempty(x); 

で私たちの状態を確認することができますが、最良の方法は、静的メソッドempty使用して空のクラスを作成することになります。

e = Foo.empty(0); 
    isa(x,'Foo') 

を、結果があります:

ISA(Foo.empty(0)、 'フー')

ANS =ところで

1 

、これはまた別の場合に便利です - あなたは動的かつFooオブジェクトの配列に成長するとします。セル配列を使用できますが、型の安全性が失われます。代わりにFoo.empty()を作成します。

しかし、この方法を使用する際の洞察があります。継承を処理するには十分スマートではありません。

BarFooから継承するクラスとしましょう。

classdef Bar < Foo 

end 

そして、あなたはFooオブジェクトの新しい配列を割り当て:プロパティを持たない

x = Foo.empty(0) 

X =

0x0の空のFoo。
方法

その後Barを追加しよう:

x(end+1) = Bar() 

??? BarからFooへの変換で次のエラーが発生しました: ==> Fooを使用しているエラー 入力引数が多すぎます。

この場合、唯一の回避策はセルアレイを使用することです。


編集(1): Matlabの継承を処理するためにspecial classを追加したようだ:

説明

matlab.mixin.Heterogeneousが提供する抽象クラスであります異種アレイの形成のために をサポートする。異種配列は、特定のクラスが異なる オブジェクトの配列ですが、すべて から派生したもの、またはルートクラスのインスタンスです。ルートクラスはmatlab.mixin.Heterogeneousから直接 を派生します。

関連する問題