'Futari: 首先IDEA定义了多种类型的变量都可以为紫色,比如实例变量、常量等,注意,标注为紫色和紫色下划线没有被包含或组合的关系 被重新分配地址的变量,官方叫reassigned paramster,指的是栈中也就是方法传入的引用副本,被重新赋值即指向了新的地址(对象),此时IDEA为了标注此变量,会在白色普通变量的基础上加入下划线进行标注,因为入参被改变指向的情况是不常见的,所以需要注意 而对于紫色下划线,是“匿名内部类变量”专用标识,也并不是特指它是外部传入,只是专用标识,所以可以解释文中图片,Lambda其实就是匿名内部类的另一种表示 为什么要常常把Lambda和被重新分配地址的变量搞在一起说呢,是因为在规范上是不允许在一个方法(栈)中同时出现Lambda引用被重新分配地址的变量的情况 为什么这么规定呢?原因是这个request变量是局部变量,是主类的私有栈,Lambda也就是匿名内部类想要使用只能通过构造方法传入,那么这里传递的又是一个来自主类对象的(引用)副本,两者指向同一个request对象(地址),如果在lambda之后主类的栈的引用指向了新对象,那么前面的lambda传入的还是指向旧对象的副本,那么此时就会产生原本应当内外同一对象的两个引用副本指向了不同的地址,所以可能产生不在预期内的错误,所以直接将此种方式禁用,传入lambda的变量必须为final保证不可变性 JDK8之后为什么开发中一般不显式的写final,参考effectively final特性 不在预期内的错误包括但不限于:lambda启动一个线程,代码之后然后令变量的引用 = null,那么内部类的线程中打印的变量取决于两个线程的先后顺序,程序将具有不可预测性
到底什么是rt?
Idea变量字段标记粉色下划线是怎么回事