final变量的常见用法就是定义一变量,定义后的变量的值不能进行修改。
但是今天在看mina的源码的时候发现他的类里面有这样端代码:
- private final Amf3Encoder encoder;//注意此处并未初始化该对象
- private final Amf3Decoder decoder;//注意此处并未初始化该对象
- // 构造函数
- public Amf3CodecFactory(){
- this(Charset.defaultCharset());
- }
- // 构造函数
- public Amf3CodecFactory(Charset charset) {
- //这里对这两个final变量进行赋值
- this.encoder = new Amf3Encoder(charset, LineDelimiter.UNIX);
- this.decoder = new Amf3Decoder(charset, LineDelimiter.AUTO);
- }
但是如果直接给该变量赋值,或者是在一个方法里面对改变量赋值的话,编译提示变量
未初始化的错误。错误代码如下:
- private final Amf3Encoder encoder;//注意此处并未初始化该对象
- private final Amf3Decoder decoder;//注意此处并未初始化该对象
- // 自定义的函数
- public void test() {
- //这里对这两个final变量进行赋值
- this.encoder = new Amf3Encoder(charset, LineDelimiter.UNIX);
- this.decoder = new Amf3Decoder(charset, LineDelimiter.AUTO);
- }