当我对以下代码运行静态分析时:
public ExtractDBScripts(String resBundleName)
{
super();
m_mainBundle = ResourceBundle.getBundle(resBundleName);
}
我收到以下错误:
“JAVA 0058 构造函数 'ExtractDBScripts' 调用 super()”。
super()
从构造函数调用有什么问题?
当我对以下代码运行静态分析时:
public ExtractDBScripts(String resBundleName)
{
super();
m_mainBundle = ResourceBundle.getBundle(resBundleName);
}
我收到以下错误:
“JAVA 0058 构造函数 'ExtractDBScripts' 调用 super()”。
super()
从构造函数调用有什么问题?
可能只是它完全没有必要——这是java的默认行为(它会为你调用super)。如果需要将参数传递给非默认构造函数,则需要使用对 super() 的显式调用。
静态分析工具通常会指出完全不执行任何操作或不必要的代码,以帮助您减少混乱。它还会指出 a=a; 说 a=a 没有错;但它实际上并没有做任何事情。
绝对没有问题- 尽管如果你不自己声明它,它就隐含地作为构造函数的第一行(即没有必要声明它)
我认为您正在使用的工具反对该代码行,因为它不是必需的 - 如果您删除它,编译器将自动插入它。
请参阅此处的“子类构造函数”部分。
在构造函数中调用 super() 没有任何问题,只要它是构造函数中的第一行,只要您实际上扩展了一个具有非私有构造函数的类。
如果您要扩展的类只有一个构造函数,并且它是私有的,那么您不能调用 super()。
我建议故意在您的代码中调用 super(),以便其他编码人员清楚您想要做什么。这是我工作的编程实践的一部分,而且似乎很有意义。您可能有一种方法可以设置静态分析工具以忽略对 super() 的调用,这也取决于软件。IntelliJ 在进行静态分析时具有忽略特定事物的注释。