オブジェクト配列表示のカスタマイズ
目的
非スカラー オブジェクト (空のオブジェクト配列を含む) の表示をカスタマイズします。
カスタム表示の設計
メモ
この例では、既定のオブジェクト表示をもつクラス節で説明されている EmployeeInfo
クラスを使用します。
このカスタム表示の目的は以下のとおりです。
既定のヘッダーの要素をいくつか使用して、カスタム ヘッダーを作成する。
配列内の各オブジェクトについて、プロパティ固有の情報のサブセットを表示する。
ハンドル オブジェクトとクラスのドキュメンテーションへのリンクを伴う
char
ベクトルを使用して、配列内にある削除されたオブジェクトへのハンドルをリストする。既定のヘッダーがわずかに変更された空のオブジェクトを表示する。
以下に示すのは、3 つの EmployeeInfo
オブジェクトからなる配列のカスタマイズされた表示です。
1x3 EmployeeInfo array with members: 1. Employee: Name: 'Bill Tork' Department: 'Product Development' 2. Employee: Name: 'Alice Blackwell' Department: 'QE' 3. Employee: Name: 'Nancy Green' Department: 'Documentation'
配列内にある削除されたオブジェクトのハンドルは、オブジェクトの状態を示します。
1x3 EmployeeInfo members: 1. Employee: Name: 'Bill Tork' Department: 'Product Development' 2. handle to deleted EmployeeInfo 3. Employee: Name: 'Nancy Green' Department: 'Documentation'
目的の結果を得るために、EmployeeInfo
クラスは、以下に示す matlab.mixin.CustomDisplay
クラスのメソッドをオーバーライドします。
displayNonScalarObject
— 空ではないオブジェクト配列を表示するために呼び出されるdisplayEmptyObject
— 空のオブジェクト配列を表示するために呼び出される
displayNonScalarObject のオーバーライド
MATLAB® は displayNonScalarObject
メソッドを呼び出してオブジェクト配列を表示します。EmployeeInfo
クラスでのこのメソッドのオーバーライドにより、以下が実行されます。
配列のサイズを取得する
convertDimensionsToString
と、クラス名およびそのクラスのヘルプへのリンクを取得するgetClassNameForHeader
を使用して、ヘッダー テキストを作成する。変更されたヘッダー テキストを表示する。
配列内の要素を順にループして、個々のオブジェクトの状態に合わせて 2 つの異なるサブヘッダーを作成する。このループで、このメソッドは以下を実行します。
削除されたオブジェクトへのハンドルを検出する (
isvalid
ハンドル クラス メソッドを使用)。getDeletedHandleText
とgetClassNameForHeader
を使用して、削除されたオブジェクトへのハンドルである配列要素のテキストを作成する。配列内の有効なオブジェクト要素に対して、カスタム サブヘッダーを作成する。
有効な
objects
のName
プロパティとDepartment
プロパティを含むPropertyGroup
オブジェクトを作成する。displayPropertyGroups
静的メソッドを使用して、有効なオブジェクトのプロパティ表示を生成する。
以下に、displayNonScalarObjects
の実装を示します。
methods (Access = protected) function displayNonScalarObject(objAry) dimStr = matlab.mixin.CustomDisplay.convertDimensionsToString(objAry); cName = matlab.mixin.CustomDisplay.getClassNameForHeader(objAry); headerStr = [dimStr,' ',cName,' members:']; header = sprintf('%s\n',headerStr); disp(header) for ix = 1:length(objAry) o = objAry(ix); if ~isvalid(o) str1 = matlab.mixin.CustomDisplay.getDeletedHandleText; str2 = matlab.mixin.CustomDisplay.getClassNameForHeader(o); headerInv = [str1,' ',str2]; tmpStr = [num2str(ix),'. ',headerInv]; numStr = sprintf('%s\n',tmpStr); disp(numStr) else numStr = [num2str(ix),'. Employee:']; disp(numStr) propList = struct('Name',o.Name,... 'Department',o.Department); propgrp = matlab.mixin.util.PropertyGroup(propList); matlab.mixin.CustomDisplay.displayPropertyGroups(o,propgrp); end end end end
displayEmptyObject のオーバーライド
MATLAB は displayEmptyObject
メソッドを呼び出して空のオブジェクト配列を表示します。EmployeeInfo
クラスでのこのメソッドの実装により、以下のステップに従って空のオブジェクト用のカスタム ヘッダーが作成されます。
convertDimensionsToString
静的メソッドを使用して、配列の次元を文字形式で取得する。getClassNameForHeader
静的メソッドを使用して、関数helpPopup
にリンクされたクラス名をもつテキストを取得する。空の配列に対し、カスタム テキストを作成して表示する。
methods (Access = protected) function displayEmptyObject(obj) dimstr = matlab.mixin.CustomDisplay.convertDimensionsToString(obj); className = matlab.mixin.CustomDisplay.getClassNameForHeader(obj); emptyHeader = [dimstr,' ',className,' with no employee information']; header = sprintf('%s\n',emptyHeader); disp(header) end end
たとえば、空の EmployeeInfo
オブジェクトの表示は次のようになります。
Empt = EmployeeInfo.empty(0,5) Empt = 0x5 EmployeeInfo with no employee information