JAVA接口对象为空时,调用接口方法,程序没报错


这个问题源于在我们公司内部移动产品开发框架上看到的一段代码,总结模拟出来,大概的定义和调用情况如下:

ITest 接口


 public interface ITest {

    public void eat();
    public void shout();

}

Model类 (一个普通的类,并且类内部没有实现任何功能)


 public class Model {

    public static ITest getModel() {
        return null;
    }

}

主程序 JTest类


 public class JTest {

    public static void main(String[] args) {
        ITest test = Model.getModel();
        test.eat();
        test.shout();
        System.out.println("hahah");

    }
}

按正常的理解,这个肯定会在test.eat()处报NullPointerException, 而我测试过后也正是如此。但问题是在使用此框架进行开发时,程序运行到相关模块,并没有报错。

所以,想请教一下,JAVA是不是有什么机制或者模式能让这种调用方式可行,而这种调用方式又有什么作用呢?由于找不到写这部分代码的同事,所以,这个问题相当困扰,也觉得蛮有趣的。

跪求大神指导。

java 接口

彼端的微笑 10 years ago

如果你确定使用框架时执行test.eat();又没报错那确实有意思。
也有可能是框架把异常吞了没向上抛

anywn answered 10 years ago

我感觉你应该是跟错代码了,你断点调试可以看到执行 ITest test = Model.getModel(); 完之后得到的是什么

北斗有情破颜拳 answered 10 years ago

不可能为空的。如果没有报错的话,必然是框架为你捕获了异常处理。

捌玖寺真宵 answered 10 years ago

我敢说 肯定是你代码没有看完. 如果返回一个null那这就是完全无意义的代码, 如果真的是这样, 你删了项目还正常么...
getModel 方法肯定是返回的 接口实现的对象.
你可以去搜一下 那个接口实现的类. 仔细看一下那个 getModel方法相关类的 配置文件之类的.
看仔细... 不会有这么神奇的事发生的...

幸福如履薄冰 answered 10 years ago


Your Answer