PMD CallSuperInConstructor的原因是什么?

时间:2019-02-06 22:54:19

标签: java constructor super pmd

PMD定义规则CallSuperInConstructor。在编译器不需要的情况下,向构造函数中的SELECT p.post_title, p.id, pm.meta_value FROM wp_postmeta pm JOIN wp_posts p ON pm.post_id = p.id WHERE p.post_type = 'Product' AND pm.meta_key = '_regular_price' AND pm.meta_value = (SELECT MIN(pm2.meta_value) FROM wp_postmeta pm2 JOIN wp_posts p2 ON pm2.post_id = p2.id WHERE p2.post_title = p.post_title ) ORDER BY p.post_title; 添加无参数调用的目的是什么?

我意识到我可以禁用该规则或使用super()使每个类中的规则保持沉默。

This question讨论了为什么应该在构造函数中调用@SuppressWarnings的原因。我的问题是为什么在编译器不需要时会添加无参数super(...)调用。

1 个答案:

答案 0 :(得分:2)

如果你是上课

  • 有许多重载的构造函数
  • 扩展了一个非Object类,该类具有许多重载的构造函数

然后,当您显式调用super()时,可以避免混淆哪个类/超类构造函数被调用。

说明上述内容的示例:

class Foo {
    final int x;
    Foo(int x) {
        this.x = x;
    }
    Foo() {
        this.x = 1;
    }
}

class Bar extends Foo {
    Bar(int x) {
    }
}

问题-new Bar(10).x的值是什么?