final不加会引起Cannot find the field dataViewMap in HomeConstant

  • Post author:
  • Post category:其他


今天程序出现一个奇怪的问题,就是我的页面突然不显示数据了,前台后台都不报错,无论如何调试js,alert()都不出东西,我反复查看代码,发现是在页面载入数据时有一个判断,判断user.showTabPage的值,根据它的值来决定显示页面,我发现这个user是写在session里的,我就到登录方法里去找,找到给showTabPage赋值的方法,发现有这么一段代码:

String showTabPage = HomeConstant.dataViewMap.get(user.getRoleName());

对这段代码debug时,选中HomeConstatnt.dataViewMap时,控制台抛出异常:

Cannot find the field dataViewMap in HomeConstant

我就找到HomeConstant.dataViewMap的定义,发现有这么一段代码:

public static Map<String,String> dataViewMap = new HashMap<String, String>();
	static {
		dataViewMap.put("all", "ALL");	
		
		dataViewMap.put(M_BBS, "BBS");	
		dataViewMap.put(M_JYW, "JYW");	
		dataViewMap.put(M_XX, "XX");		
		
		dataViewMap.put(S_COMPANY, "BBS");
		dataViewMap.put(S_TEAM, "JYW");		
		dataViewMap.put(S_CAMPUS, "XX"); 	
	}

然后我就在想,会不会是定义这个变量的时候没有给它加上final来修饰,因此我就把定义改成这样:

public static final Map<String,String> dataViewMap = new HashMap<String, String>();

再执行,HomeConstant.dataViewMap有值了,不再报错,应该就是没有加final引起的,具体原因以待后叙。

PS:加上final后再运行当时不报错,后来又开始报这个错,可以判定这个错并不是由final引起的,后来判断造成这个错误的原因比较复杂,一个是我本地的编译器出了问题,不能正确编译代码,另外一个就是class文件的输出目录不能正确输出,解决方案是切换workspace,重新下代码,并且将输出路径重新设定一下。



版权声明:本文为wzf7065原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。