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 回答