はい、型に関しては、プロパティがメソッドとは異なる動作をする場合があります。これは、メソッド宣言の戻り値のクラスパラメータを簡単な方法で設定できるという点でここでの問題ですが、プロパティのクラスのクラスパラメータでは常に機能するとは限りません。
私はそれが機能する方法が完全に文書化されているとは思いませんが、ここに私の観察のいくつかがあります:
プロパティのタイプがデータ型(オブジェクトとは異なる方法で処理されることが多い)の場合は、プロパティにクラスパラメーターを設定できます。
%XML.Adaptorクラスを見ると、キーワード割り当てステートメントがあります。
PropertyClass = %XML.PropertyParameters
これにより、PropertyClassとして宣言するクラスのすべてのプロパティにパラメータが追加されたように見えます。これは、Intersystemsが何か(XMLアダプター)を実装したいと考えていて、オブジェクトの実装がそれをきれいに提供しなかったことを認識したため、クラスコンパイラーに新しい何かをハッキングした例のようです。私は実際に多くのドキュメントを見つけることができないので、それが使用可能なAPIと見なされるのか、それとも破損する可能性のある実装の詳細と見なされるのかは明確ではありません。
あなたはこの方法で何かをハックすることができるかもしれません-私は同じようなものを試したことがありません。
おそらくより簡単な回避策は、%OnNewおよび%OnOpenのPermissionsプロパティを初期化することです。とにかく、nullではなく、その時点でゼロ要素配列が必要になるでしょう。
%ListOfObjectsの実装を見ると、設定しようとしているクラスパラメータがElementTypeプロパティのデフォルト値を提供していることがわかります。したがって、%ListOfObjectsのインスタンスを作成した後、そのElementTypeプロパティを適切な要素タイプに設定するだけで済みます。
毎回手作業で行うことを忘れないようにする必要があり、忘れてしまう可能性があるため、これは少し面倒です。または、将来のメンテナは今それをしないかもしれません。
それを必要とするすべてのプロパティを初期化するジェネレータメソッドを作成することで、少し煩わしさを軽減したいと思うかもしれません。これは、Intersystemsに任意の値でプロパティに注釈を付ける適切なシステムがあれば簡単です(したがって、各プロパティに使用するElementTypeを知ることができます)。ただし、そうではないため、XDataブロックまたはクラスメソッドを使用して独自のアノテーションをロールするなどの操作を行う必要があります。アノテーションのユースケースがこれだけではない場合を除いて、これはおそらく価値がないので、それが発生するまでは、手作業で実行します。