java - NullPointerException 因为重写函数并被父类(super class)调用

标签 java

以下设置:

public class Superclass
{
    private String params;

    public Superclass(String params)
    {
        this.params = params;
        doStuff();
    }

    public void doStuff()
    {
        // uninteresting stuff
    }
}

public class Subclass extends Superclass
{
    private Object someObject;

    public Subclass(String params, Object someObject)
    {
        super(params);
        this.someObject = someObject;
    }

    @Override
    public void doStuff()
    {
        someObject.toString(); // <- causes NullPointerException
    }
}

父类(super class)创建一个用户界面,而子类应该创建一个更专业的版本。

从软件工程的角度来看,当“子类”仍然扩展“父类(super class)”时,防止 NullPointerException 的最简洁方法是什么?

最佳答案

父类在构造时没有明显的原因来调用doStuff

简单地说,不要将调用放在那里。这些类应该彼此独立地构建。父类不应依赖于子类的任何数据来完成其构造;在父级构造函数中调用的子级重写的任何方法都会引入此依赖项。

如果您确实发现需要在父级中调用额外的方法,那么您可以创建一个final方法,并且不会发生不良影响,因为子级将无权访问该方法。

public class Superclass {
    private String params;

    public Superclass(String params) {
        this.params = params;
        doStuffParent();
    }

    public final void doStuffParent() {
        // uninteresting stuff
    }

    public void doStuff() {
        // uninteresting stuff...again?
    }
}

关于java - NullPointerException 因为重写函数并被父类(super class)调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27884152/

相关文章:

java - TODO 警告的 Sonar 类别

java - Lucene 反向搜索

java - JFileChooser 帮助

java - JNI 和 C++ - UnsatisfiedLinkError

java - 获取随机值android firebase java

java |属性的可变值

java - 如何在Android 9.0上通过HTTP获取图像然后裁剪图像?

java - 写入数据库时​​错误的 UTF-8 编码(读取正常)

java - 为什么无法在正则表达式匹配器中返回类型化组?

java - Oracle 中的日期保存不适用于 ISO 8601 标准