请尽量耐心等待,同时尽量提供尽可能多的信息。反思:枚举是公有的,那么该方法为什么IlegalAccessException即将到来?
我得到下面的异常在我的代码随机并不总是:
ERROR CACHE-SELECT 2015-08-20 11:19:00,822 nested exception is org.apache.ibatis.builder.BuilderException: Error evaluating expression 'table.selectQuerySuffix'. Cause: org.apache.ibatis.ognl.OgnlException: selectQuerySuffix [java.lang.IllegalAccessException: Class org.apache.ibatis.ognl.OgnlRuntime can not access a member of class com.dclear.cmn.core.cache.CacheEnum$4 with modifiers "public"] -
枚举定义为如下:
public enum CacheEnum {
TABLE_NAME() {
@Override
public String getSelectQuerySuffix() {
return "";
}
};
private CacheEnum() {
//some assignment
}
public enum Schema {
//SCHEMAS DEFINED
}
public enum SchemaName {
// NAMES
}
public String getSelectQuerySuffix() {
return "";
}
public enum ColumnEnum {
//SOME VALUES
ColumnEnum() {
}
}
public enum CacheTableSequence {
//SQs
}
}
'table.selectQuerySuffix' 的定义在MyBatis文件中放置查询后缀。而在运行时,它被称为“”过去了(指覆盖的方法getSelectQuerySuffix())
这个问题并不总是来了...我已阅读,
的IllegalAccessException被抛出当应用程序试图 反射性地创建一个实例(除数组外),设置或获取一个 字段,或者调用一个方法,但是当前执行的方法不是 有权访问指定的类,字段,方法或构造函数的定义。
没有用户定义的类加载器。
但是,如果问题是因为构造函数CacheEnum是私有的,为什么它不总是来?如果不是那么它背后的问题是什么?我在这里错过了什么?
为什么你的构造函数是私人的?因为在你的课堂上,没有可公开访问的构造函数。如果将构造函数更改为public,会发生什么情况?这个问题是否仍然存在? –
你是什么意思_这个问题并不总是come_? – KDM
类名'com.dclear.cmn.core.cache.CacheEnum $ 4'意味着你的枚举具有匿名类。可以显示完整的CacheEnum源代码? –