成员内部类的使用
有的情况下我们需要在一个类的内部定义一个成员内部类,然后给内部类的成员变量进行赋值。
具体使用举例:
外部类&内部类创建
首先我们先创建一个包含内部类的外部类:
图中可以看到:
外部类 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();
以上内容是我在实际应用过程中遇到的问题,如果有错误的地方请大家不吝赐教