2

当我对以下代码运行静态分析时:

  public ExtractDBScripts(String resBundleName)
    {
        super();
        m_mainBundle = ResourceBundle.getBundle(resBundleName);
    }

我收到以下错误:

“JAVA 0058 构造函数 'ExtractDBScripts' 调用 super()”。

super()从构造函数调用有什么问题?

4

5 回答 5

13

可能只是它完全没有必要——这是java的默认行为(它会为你调用super)。如果需要将参数传递给非默认构造函数,则需要使用对 super() 的显式调用。

静态分析工具通常会指出完全不执行任何操作或不必要的代码,以帮助您减少混乱。它还会指出 a=a; 说 a=a 没有错;但它实际上并没有做任何事情。

于 2009-07-07T16:40:54.180 回答
2

绝对没有问题- 尽管如果你不自己声明它,它就隐含地作为构造函数的第一行(即没有必要声明它)

于 2009-07-07T16:40:58.393 回答
2

我认为您正在使用的工具反对该代码行,因为它不是必需的 - 如果您删除它,编译器将自动插入它。

请参阅此处的“子类构造函数”部分。

于 2009-07-07T16:41:57.503 回答
0

在构造函数中调用 super() 没有任何问题,只要它是构造函数中的第一行,只要您实际上扩展了一个具有非私有构造函数的类。

如果您要扩展的类只有一个构造函数,并且它是私有的,那么您不能调用 super()。

于 2009-07-07T16:41:36.737 回答
0

我建议故意在您的代码中调用 super(),以便其他编码人员清楚您想要做什么。这是我工作的编程实践的一部分,而且似乎很有意义。您可能有一种方法可以设置静态分析工具以忽略对 super() 的调用,这也取决于软件。IntelliJ 在进行静态分析时具有忽略特定事物的注释。

于 2009-07-07T17:15:21.803 回答