java - 匿名内部类中传入的参数必须为final , 才能使用来自该类外部范围的对象,但为什么这面的程序没有错误
高洛峰
高洛峰 2017-04-17 17:27:49
[Java讨论组]

下面程序不管我是否在匿名内部类参数中添加final,都没有问题

import java . util . * ;
import java . util . regex . * ;
import java . io. * ;
import java . io . File ; 

class DirList2
{
        public static FilenameFilter filter( String regex )        
        // 这边暂时我不设final , 看看编译是会出现什么情况!
        {
                return new FilenameFilter ( ) 
                {
                        private Pattern pattern = Pattern . compile ( regex )  ;
                        public boolean accept ( File dir , String name )
                        {
                                return pattern . matcher (name) . matches ( ) ;
                        }
                } ; 
        }
        public static void main (String [ ] args)
        {
                String [ ] names ;
                File files = new File ( ".") ;        // 这个File目录其实名字应该为FilePath 
                                                            //哈哈
                if (args . length == 0)
                {
                        names = files . list ( ) ; 
                }
                else
                {
                        names = files . list ( filter (args [0])) ;
                }
                Arrays . sort ( names , String . CASE_INSENSITIVE_ORDER ) ;
                for (String fileName : names )
                        System . out . println ( fileName ) ; 
        }
}
高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(2)
巴扎黑

Java 8 只要求是 effectively final,写不写没关系的。

PHP中文网

不加,编译器会报错。是不是没编译了?

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号