メインコンテンツ

プロパティ表示のカスタマイズ

R2026b

目的

ユーザー クラスのオブジェクトに対し表示されるプロパティの順序と個数を変更します。

プロパティの順序の変更

ユーザー クラスの定義に以下のプロパティ定義が含まれるとします。

properties
      Name
      JobTitle
      Department
      Salary
      Password
end

既定のスカラー オブジェクト表示では、MATLAB® はすべてのパブリック プロパティをその値と共に表示します。しかしここでは、Department、JobTitle、Name のみをこの順序で表示するとします。これを行うには、CustomDisplay から getPropertyGroups メソッドを派生させて、これをオーバーライドします。

オーバーライドによって以下を実行します。

  • メソッド Access を protected として定義し、CustomDisplay スーパークラスの定義と一致させる。

  • 目的の順序に並んだプロパティ名の cell 配列を作成する。

  • プロパティ リストの cell 配列から構成された PropertyGroup オブジェクトを返す。

methods (Access = protected)
   function propgrp = getPropertyGroups(~)
      proplist = {'Department','JobTitle','Name'};
      propgrp = matlab.mixin.util.PropertyGroup(proplist);
   end
end

プロパティ名の cell 配列を使用して PropertyGroup オブジェクトを作成すると、MATLAB は自動的に以下を実行します。

  • スカラー オブジェクト表示に対してプロパティ値を追加する。

  • 非スカラー オブジェクト表示 (空のオブジェクト配列を含む) に対して、値なしのプロパティ名を使用する。

削除されたオブジェクトへのスカラー ハンドルの表示の作成では getPropertyGroups メソッドは呼び出されません。

プロパティに対し表示される値の変更

前のセクションで使用された同じクラス プロパティに対し、プロパティに表示される値を変更するには、プロパティ リストを struct として作成し、プロパティ名に対して値を指定します。この getPropertyGroups メソッドのオーバーライドでは、スーパークラス getPropertyGroups メソッドを呼び出すことにより、非スカラー オブジェクトの既定のプロパティ表示を使用します。スカラー オブジェクトに対しては、オーバーライドによって以下が実行されます。

  • Password プロパティに表示される値で、パスワードの各文字を '*' の文字に変更する。

  • Salary プロパティにテキスト 'Not Available' を表示する。

methods (Access = protected)
   function propgrp = getPropertyGroups(obj)
      if ~isscalar(obj)
         propgrp = getPropertyGroups@matlab.mixin.CustomDisplay(obj);
      else
         pd(1:length(obj.Password)) = '*';
         propList = struct('Department',obj.Department,...
            'JobTitle',obj.JobTitle,...
            'Name',obj.Name,...
            'Salary','Not available',...
            'Password',pd);
         propgrp = matlab.mixin.util.PropertyGroup(propList);
      end
   end
end

オブジェクトの表示は以下のようになります。

  EmployeeInfo with properties:

    Department: 'Product Development'
      JobTitle: 'Software Engineer'
          Name: 'Bill Tork'
        Salary: 'Not available'
      Password: '*******'
classdef EmployeeInfo < handle & matlab.mixin.CustomDisplay
   properties
      Name
      JobTitle
      Department
      Salary
      Password
   end
   methods
      function obj = EmployeeInfo
         obj.Name       = input('Name: ');
         obj.JobTitle   = input('Job Title: ');
         obj.Department = input('Department: ');
         obj.Salary     = input('Salary: ');
         obj.Password   = input('Password: ');
      end
   end
   methods (Access = protected)
      function propgrp = getPropertyGroups(obj)
         if ~isscalar(obj)
            propgrp = getPropertyGroups@matlab.mixin.CustomDisplay(obj);
         else
            pd(1:length(obj.Password)) = '*';
            propList = struct('Department',obj.Department,...
               'JobTitle',obj.JobTitle,...
               'Name',obj.Name,...
               'Salary','Not available',...
               'Password',pd);
            propgrp = matlab.mixin.util.PropertyGroup(propList);
         end
      end
   end
end

参考

トピック