美文网首页
匿名内部类的使用

匿名内部类的使用

作者: 拾月初六 | 来源:发表于2019-08-15 12:01 被阅读0次

1.匿名内部类中局部变量的使用

在JDK8中,匿名内部类使用局部变量不再要求局部变量使用final修饰,那么是否我们就不会再发生Local variable *** defined in an enclosing scope must be final or effectively final 的错误嗯,其实还是会有的,下面我们看下会有什么情况依旧编译报错。

        String str1 = "hello";
        new Thread(){
            @Override
            public void run() {
                System.out.println(str1);
            }
        }.start();

首先在这个例子里,我们可以看到,普通的使用一个局部变量是不要求final修饰的。
但是下面这种对变量进行了初始化赋值,然后再次指向一个新对象时就会出现问题了。

        String str2 = null;
        /*str2做了判断再赋值*/
        if("hello".equals(str1)){
            str2 = "world1";
        }else{
            str2 = "world2";
        }
        new Thread(){
            @Override
            public void run() {
                System.out.println(str2);
            }
        }.start();

此时的System.out.println(str2)这里就提示编译报错了。
这里报错的原因就是str2这个变量在编译器看来,不再具有唯一性了,更深的底层原理需要再研究。
我们这里讲下这种问题的解决棒法。
1: 将变量重新赋值给另外一个引用。如用str3指向str2的对象,内部类里面使用str3就可以了。
如图

2: 将对象做为数组的一部分,内部类中使用数组获取对象再使用也可以解决问题,如图。


原理都是将我们需要的数据重新绑定到一个编译器认为具有final性的引用里面就可以了,所以只要知道原理, 也可以自己灵活变动解决问题了。

相关文章

  • java中的匿名内部类总结

    匿名内部类也就是没有名字的内部类 正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写 但使用匿名内...

  • 技术问 - 匿名内部类

    匿名内部类 匿名内部类的格式 匿名内部类的本质是什么? 代码: 匿名内部类在开发中使用: 看结果写代码

  • 详解匿名内部类【Java提高九】

    在这篇博客中你可以了解到匿名内部类的使用、匿名内部类要注意的事项、如何初始化匿名内部类、匿名内部类使用的形参为何要...

  • Kotlin-Object关键字作用

    Object关键字使用场景:匿名内部类、单例、伴生对象。 匿名内部类 Kotlin匿名内部类定义使用跟Java类似...

  • 用于匿名内部类的泛型

    匿名内部类 泛型还可以使用于内部类和匿名内部类。 上面的Customer和Teller都通过使用匿名内部类实现了G...

  • Java匿名类

    实例1:不使用匿名内部类来实现抽象方法 实例2:匿名内部类的基本实现 实例3:在接口上使用匿名内部类

  • Android菜鸟起飞|三种方法实现监听事件

    Android实现监听事件的三种方式(匿名内部内实现,外部类实现,接口实现)详解 1. 使用匿名内部类的方式实现监...

  • java 内部类

    一般有四种内部类的使用方式: 嵌套的内部类 方法内的内部类 静态内部类 匿名内部类 什么时候用内部类: 有时候明显...

  • Java--内部类的分类-3(匿名内部类)

    匿名内部类  匿名内部类适合那种只需要使用一次的类。比如:键盘监听操作等等。 语法: 【示例】匿名内部类的使用 注...

  • 内部类

    成员内部类 局部内部类(定义在方法内和定义在作用域内的类) 匿名内部类

网友评论

      本文标题:匿名内部类的使用

      本文链接:https://www.haomeiwen.com/subject/zfaajctx.html