特定の値をもつオブジェクトの検出
ハンドル オブジェクトの検出
handle クラスの findobj メソッドを使用して、特定の値のプロパティをもつオブジェクトを見つけます。たとえば、以下のクラスは PhoneBook オブジェクトを定義して、データ ベース内の電話帳エントリを表します。PhoneBook クラスは、handle から派生する dynamicprops クラスをサブクラス化します。
classdef PhoneBook < dynamicprops properties Name Address Number end methods function obj = PhoneBook(n,a,p) obj.Name = n; obj.Address = a; obj.Number = p; end end end
データベースに以下の 3 つの PhoneBook エントリがあります。
PB(1) = PhoneBook('Nancy Vidal','123 Washington Street','5081234567'); PB(2) = PhoneBook('Nancy Vidal','123 Main Street','5081234568'); PB(3) = PhoneBook('Nancy Wong','123 South Street','5081234569');
これらの 3 つの PhoneBook オブジェクトのいずれかに、動的プロパティがあります。
PB(2).addprop('HighSpeedInternet'); PB(2).HighSpeedInternet = '1M';
プロパティと値の組み合わせの検出
従業員 Nancy Wong を表すオブジェクトを検索し、文字列を連結して、名前と番号を表示します。
NW = findobj(PB,'Name','Nancy Wong'); [NW.Name,' - ',NW.Number]
ans = Nancy Wong - 5081234569
特定のプロパティ名をもつオブジェクトの検出
-property オプションを以下のように使用して、特定のプロパティ名があるオブジェクトを検索します。
H = findobj(PB,'-property','HighSpeedInternet'); H.HighSpeedInternet
ans = 1M
-property オプションを使用すると、プロパティ値を省略して、プロパティ名のみを使用したオブジェクト検索ができます。
論理式の使用
プロパティ名と値の特定の組み合わせを以下のように検索します。
H = findobj(PB,'Name','Nancy Vidal','-and','Address','123 Main Street'); H.Number
ans = 5081234568
属性設定による検出
すべてのメタクラスは handle クラスから派生しています。handle ハンドルの findobj メソッドを使用して、特定の属性設定をもつクラス メンバーを検出できます。
たとえば、matlab.metadata.Class MethodList で、Abstract プロパティが true に設定された matlab.metadata.Method オブジェクトを探して、クラス定義に含まれる抽象メソッドを検出します。
クラスは抽象型なので、文字形式でクラス名を使用します。このクラスのオブジェクトは作成できません。
mc = matlab.metadata.Class.fromName('MyClass');matlab.metadata.Method オブジェクトの MethodList リスト内で、Abstract プロパティが true に設定されているメソッドを検出します。
absMethods = findobj(mc.MethodList,'Abstract',true);
methodNames = {absMethods.Name};cell 配列 methodNames にはクラスの抽象メソッドの名前が含まれています。
パブリックの GetAccess をもつプロパティの検出
パブリックの GetAccess をもつ、containers.Map クラス内のすべてのプロパティ名を以下のように検出します。
matlab.metadata.Classオブジェクトを取得します。findobjを使用すると、matlab.metadata.Propertyオブジェクトの配列を検索できます。プロパティ名の cell 配列を作成するには、中かっこを使用します。
mc = ?containers.Map; mpArray = findobj(mc.PropertyList,'GetAccess','public'); names = {mpArray.Name};
パブリックの GetAccess をもつすべての containers.Map プロパティの名前を表示します。
celldisp(names)
names{1} =
Count
names{2} =
KeyType
names{3} =
ValueType
静的メソッドの検出
containers.Map クラス メソッドに静的メソッドがあるかどうかを以下のように判定します。
~isempty(findobj([mc.MethodList(:)],'Static',true))
ans =
1findobj は静的メソッドの matlab.metadata.Method オブジェクトの配列を返します。この例では、静的メソッドのリストは空ではありません。したがって、このクラスで定義されている静的メソッドがあることになります。
配列 matlab.metadata.Method から静的メソッドの名前を取得します。
staticMethodInfo = findobj([mc.MethodList(:)],'Static',true);
staticMethodInfo(:).Name
ans = empty
静的メソッドの名前 (この場合 1 つのみ) は empty です。empty メソッドの matlab.metadata.Method オブジェクトの情報は次のとおりです。
staticMethodInfo
method with properties:
Name: 'empty'
Description: 'Returns an empty object array of the given size'
DetailedDescription: ''
Access: 'public'
Static: 1
Abstract: 0
Sealed: 0
Hidden: 1
InputNames: {'varargin'}
OutputNames: {'E'}
DefiningClass: [1x1 matlab.metadata.Class]