使用MVEL需要值得注意的地方
do { propertyHandlerClass.put(clazz, propertyHandler); for (Class c : clazz.getInterfaces()) { propertyHandlerClass.put(c, propertyHandler); } } while ((clazz = clazz.getSuperclass()) != null && clazz != Object.class);
?
使用MVEL的PropertyHandlerFactory注册自己的处理类时,一定要注意,MVEL会把该class的interface都会注册为该处理类。
?
简单的说:
?
class C implements A,B
class D implements A
class E implements B
?
如果注册C的处理类为CHandler,从上面的代码就可以看出,MVEL会把C的处理类也当作A和B的处理类。那么,MVEL在解析D时,就会使用CHandler,这样肯定会ClassCastException。
?
唯一的办法就是,注册上去之后,再把interface去掉。