Java出现No enclosing instance of type FilenameFileterTest is accessible.编译错误


No enclosing instance of type FilenameFileterTest is accessible. Must qualify the allocation with an enclosing instance of type FilenameFileterTest (e.g. x.new A() where x is an instance of FilenameFileterTest).


出现这个问题。意思是没有封闭的可用的FilenameFileter实例。必须分配一个封闭的实例类型FilenameFileterTest,例如x.new Classname(),x必须是FilenameFileterTest的实例。  .

但是,我已经使用new 实例,后来查资料,是因为外部类不是静态的,main()方法是静态方法。最简单是将内部类修饰为静态类,然后在静态类中调用该类的成员变量和成员方法。或者就创建实例ClassName obj1 = new ClassName();。

代码如下,本来是想把Lambda表达式改写为外部类形式,然后发现的这个问题。输出当前路径下以.java结尾的文件和为路径的文件。

只有将某个内部类修饰为静态类,然后才能够在静态类中调用该类的成员变量与成员方法。

import java.io.*;
public class FilenameFileterTest  {
	public static void main(String[] args)
	{
		File file  =new File(".");
		System.out.println(file.getAbsoluteFile());
		//使用Lambada表达式(目标类型为FilenameFileter)实现文件过滤器
		//如果文件名以.java结尾,或者文件对对那个一个路径,返回true
		String[] nameList = file.list((dir,name)-> name.endsWith(".java")||new File(name).isDirectory());
		for(String name : nameList)
		{
			System.out.println(name);
		}
	}
}
改写后的外部类形式为(java 8新增的Lambada表达式还是不太熟悉,碰到新的我都会改写为内部类形式,感觉还是多练,根据要出的结果改写,这样会快一点):

import java.io.*;
public class FilenameFileterTest  {
	static class filenameFileter implements FilenameFilter{
//这里必须要有static修饰,或者你可以把这个类放在public static void main,方法里面的内部类
			public boolean accept(File dir,String name){
				if(name.endsWith(".java")||new File(name).isDirectory())
					return true;
				else
					return false;
			}
		}
	public static void main(String[] args)
	{
		
		File file  =new File(".");
		System.out.println(file.getAbsoluteFile());
		//使用Lambada表达式(目标类型为FilenameFileter)实现文件过滤器
		//如果文件名以.java结尾,或者文件对对那个一个路径,返回true
		//String[] nameList = file.list((dir,name)-> name.endsWith(".java")||new File(name).isDirectory());
		/*
		for(String name : nameList)
		{
			System.out.println(name);
		}
		*/
		String[] nameList = file.list();
		for(String name : nameList)
		{
			if(new filenameFileter().accept(file, name))
				System.out.println(name);
		}
	}
}

下面是匿名内部类形式:

import java.io.*;
public class FilenameFileterTest  {
	public static void main(String[] args)
	{
		File file  =new File(".");
		System.out.println(file.getAbsoluteFile());
		String[] nameList = file.list(new FilenameFilter(){//匿名内部类
			public boolean accept(File dir,String name){
				if(name.endsWith(".java")|| new File(name).isDirectory())
					return true;
				else
					return false;
			}
		});
		for(String name : nameList)
		{
			System.out.println(name);
		}
	}
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值