java - 通过接口(interface)引用访问实现的类方法,无需构造函数初始化

标签 java

我有一个类CommonDaoImpl,它实现了CommonDao接口(interface)。现在我尝试通过接口(interface) CommonDao 引用访问 CommonDaoImplgetRegisterData(),如下所示

public class CommonServiceImpl implements CommonService 
{
    CommonDao commonDao
    public boolean insertRegisterData(CommonBean objCommonBean)  {
        return commonDao.getRegisterData(objCommonBean);
    }

但它不起作用并抛出 NullPointerException

所以我稍微改变了我的代码并使用实现类 CommonDao impl 的构造函数初始化接口(interface)引用,如下所示

public class CommonServiceImpl implements CommonService 
{
    CommonDao commonDao=new CommonDaoImpl();

    public boolean getRegisterData(CommonBean objCommonBean)  {
        return commonDao.insertRegisterData(objCommonBean);
    }

但我不明白为什么会发生这种情况。

最佳答案

第一种情况

CommonDao commonDao

它是类的成员字段,未初始化,具有默认值 null,因此在 null 上调用方法会导致 NullPointerException

在第二种情况下,您正在初始化它

CommonDao commonDao=new CommonDaoImpl();

关于java - 通过接口(interface)引用访问实现的类方法,无需构造函数初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11295660/

相关文章:

java - 在 Java 9 中加载类和资源

java - Java 中 List<Integer, Integer> 元素的总和

java - assertNotEquals 静态导入导致编译错误

javax.ejb.EJBException : nested exception is: java. rmi.UnmarshalException:找不到方法: 'helloWorld(Ljava.lang.Long;Ljava.util.List;)'

java - IntelliJ 在打开 Gradle 项目时崩溃,为什么?

java - 在单元测试中使用接口(interface)

java - 如何在 Java 中创建动态变量?

java - 验证选择元素

java - 运行 powershell 命令时出错

java - Android Studio : playing with Intents and sending data between activities