成员内部类的使用

本文介绍了Java中成员内部类的使用,包括如何为外部类的内部类成员变量赋值。错误的直接赋值方式会导致空指针异常,而正确的做法是先通过外部类实例化内部类,再进行赋值。详细解释了实例化内部类的构造方法,并提供了两种正确的赋值示例。
摘要由CSDN通过智能技术生成

@成员内部类的使用

成员内部类的使用

有的情况下我们需要在一个类的内部定义一个成员内部类,然后给内部类的成员变量进行赋值。
具体使用举例:

外部类&内部类创建

首先我们先创建一个包含内部类的外部类:

可以看到图片
图中可以看到:
外部类 CommonResponse 中定义了一个内部类 CommonResult,同时外部类有一个内部类CommonResult类型的成员变量 result
这里需要注意的是:result 是没有赋值实例的(这么做的好处,我猜应该是实例化CommonResponse 不需要额外支出result 对应类型的内存)

给外部类的成员变量赋值内部类

那么问题来了,如何给这个内部类类型的result赋值呢?
我们看到有个 setResult方法可以使用过,但是其参数要求是一个 CommonResponse.CommonResult 类型

  • 错误的赋值方法

我们首先尝试一种直接赋值的方法

CommonResponse response = new CommonResponse();
response.getResult().setOutput("这里是赋值字符串");

这样赋值在编译时没有语法错误,但是执行时会报空指针异常
在这里插入图片描述
为什么会这样呢?原因是respose虽然是实例化的,但是它的成员变量并未实例化,导致使用setOutput方法时报NullPointerException,即response的result是空的,无法对其赋值。

  • 正确赋值方法

那么正确的操作应该怎么做呢?

CommonResponse response = new CommonResponse();
CommonResponse.CommonResult newResult = response.new CommonResult();
newResult.setOutput("这是正确的赋值方式");
response.setResult(newResult);

我们先实例化一个 CommonResult 类,创建 newResult 对象,然后给 newResult 对象的成员变量赋值后再将 newResult 赋值给 response 的成员变量 result。

这里有个需要注意的地方:
实例化的构造方法是使用已经实例化response的内部类构造方法,即需要通过外部类对象去创建内部类对象

也可以用以下方式实例化内部类:

CommonResponse.CommonResult newResult = new CommonResponse().new CommonResult();

以上内容是我在实际应用过程中遇到的问题,如果有错误的地方请大家不吝赐教
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值