モジュール java.desktop
パッケージ java.awt.image.renderable

クラスParameterBlock

java.lang.Object
java.awt.image.renderable.ParameterBlock
すべての実装されたインタフェース:
Serializable, Cloneable

public class ParameterBlock extends Object implements Cloneable, Serializable
ParameterBlockは、RenderableImageOpや、イメージを処理するほかのクラスによって必要とされるソースおよびパラメータ(Object)についてのすべての情報をカプセル化します。

ソースVectorには任意のオブジェクトを配置できますが、このクラスのユーザーは、たとえば、すべてのソースはRenderedImagesまたはRenderableImageでなければならない、などのような意味制約を加えることもできます。 ParameterBlock自体はコンテナにすぎないので、ソースまたはパラメータの型のチェックは行いません。

ParameterBlockのパラメータはすべてオブジェクトです。基本型の引数をとる簡易addメソッドおよびsetメソッドが利用可能で、適切なNumber (IntegerまたはFloatなど)のサブクラスを作成します。 対応するgetメソッドは、下方キャストを実行し、基本型の戻り値を受け取ります。 "短いs;add(s)"と"add(Short.valueOf(s)の結果を区別する方法はありません。

getメソッドおよびsetメソッドは参照に影響を与えます。 したがって、ParameterBlock間での参照の共有が不適切な場合は、共有しないようにしてください。 たとえば、追加されたソースを除いて、古いParameterBlockと同じ新しいParameterBlockを作成する場合に、次のように記述してしまいがちです。

 ParameterBlock addSource(ParameterBlock pb, RenderableImage im) {
     ParameterBlock pb1 = new ParameterBlock(pb.getSources());
     pb1.addSource(im);
     return pb1;
 }
 

このコードは、getSources操作がソースVectorへの参照を返したために、元のParameterBlockを変更する副作用があります。 pbとpb1はソースVectorを共有しているので、一方の変更は両方に対して可視になります。

addSource関数の記述方法で適切なのは、次のようにソースVectorを複製する方法です。

 ParameterBlock addSource (ParameterBlock pb, RenderableImage im) {
     ParameterBlock pb1 = new ParameterBlock(pb.getSources().clone());
     pb1.addSource(im);
     return pb1;
 }
 

ParameterBlockのcloneメソッドは、こうした理由でソースとパラメータの両方のVectorの複製を実行するように定義されています。 標準のシャロー複製をshallowCloneとして利用できます。

addSource、setSource、add、およびsetの各メソッドは、引数を追加したあとでthisを返すように定義されます。 そのため、次のような構文の使用が可能です。

 ParameterBlock pb = new ParameterBlock();
 op = new RenderableImageOp("operation", pb.add(arg1).add(arg2));
 

関連項目: