如何实例化抽象类以删除NullPointerException?

时间:2014-04-01 15:28:59

标签: java nullpointerexception abstract-class instantiation jmonkeyengine

所以问题标题有点奇怪,但这是我能想到的唯一方法。这样做我有一个NullPointerException(额外的代码被取出):

public abstract class Generator extends SimpleApplication{

    private static SimpleApplication sa;

    public static void Generator(){
        CubesTestAssets.initializeEnvironment(sa);
    }

我知道private static SimpleApplication sa;null但是当我实例化它时,我收到此错误而不是NullPointerException

SimpleApplication is abstract; cannot be instantiated

我正在使用jMonkey Engine 3.如果有人知道如何解决这个问题,那就太棒了!谢谢!

2 个答案:

答案 0 :(得分:3)

如果您仔细查看JMonkey文档,可以使用SimpleApplication扩展您的应用程序。

您应该创建一个扩展SimpleApplication的新类并实现缺少的方法。然后,您实例化自定义类并将其作为参数传递。

有点像这样:

public class myCustomSimpleApplication extends SimpleApplication {

    // Implementing the missing methods
    @Override
    public void simpleInitApp() {
    }

    @Override
    public void simpleUpdate(float tpf) {
    }

    // etc...

}

然后......

private static SimpleApplication sa = new myCustomSimpleApplication();

public static void Generator(){
    CubesTestAssets.initializeEnvironment(sa);
}

答案 1 :(得分:1)

正如其他人所评论的那样,扩展Generator的基础应用程序类(我假设它是SimpleApplication)不能是抽象的,即它应该至少实现simpleInitApp方法。请参阅JMonkeybasic exampleSimpleApplication文档。

为了完成,我将提到如果你真的需要创建一个抽象类的虚拟实例,你可以“内联”,而无需显式编写完整的实现类。您只需要在构造函数调用之后编写由大括号括起的抽象方法的实现:

public abstract class AbstractClass {

    private static AbstractClass a = new AbstractClass() {
        @Override
        public void abstract_method() {/*implementation*/}
    };

    public abstract void abstract_method();

}

在幕后创建anonymous class。但我绝对不认为这是你在这种情况下所需要的。