0

インターフェイスPluginFilterを使用して、imageJ用の一連のプラグインを作成しました。これらのプラグインの多くはいくつかの共通のタスクを共有しており、imageJの外部でそれらをインスタンス化したいので、コンストラクターを含む抽象的なAnalysis.javaを作成しました

public Analysis(ImagePlus imp){
populateDBValues(imp);
}

ただし、デフォルトのコンストラクターはありません。他のプラグインはAnalysisを拡張します。以前、各プラグインでコードを繰り返していましたが、これは正常に機能しました。コンストラクターが追加されたとき、ImageJで「プラグインをロードできません」というメッセージを示すエラーが発生しました。

私はこれをソースコードを通して追跡しました

catch (InstantiationException e) {log("Unable to load plugin (ins)");}

コンストラクターを追加するとこのエラーが発生するのはなぜですか?

4

1 に答える 1

0

デフォルトのコンストラクタとJavaの継承から "Javaは、デフォルトのコンストラクタ(パラメータなしのコンストラクタ)を自動的に提供します。これにより、クラスのすべてのインスタンス変数(存在する場合)がデフォルト値(0、null、またはfalse)で初期化されます。ただし、いくつかのパラメーターを使用してコンストラクターを作成し、デフォルトのコンストラクターを作成しない場合、Javaはデフォルトのコンストラクターを提供しません。」

パラメータを使用してコンストラクタを作成する前に、ImageJはプラグインのロード時にデフォルトのコンストラクタを使用できます。パラメーターを使用してコンストラクターを作成した後、デフォルトのコンストラクターが存在しなくなったため、ImageJはプラグインをインスタンス化できず、エラーをスローします。

クラスにデフォルトのコンストラクターを追加すると、問題が解決します。

于 2012-05-28T12:41:55.043 に答える