【问题标题】:Can not access a member of class "com.ABC$XYZ" with modifiers "synchronized"无法使用修饰符“同步”访问“com.ABC$XYZ”类的成员
【发布时间】:2013-12-27 15:16:52
【问题描述】:

我正在尝试使用反射 API 检索同步方法。

下面给出的示例代码sn-p:

class ABC {
    class XYZ {
        synchronized List methodOfXYZ() {
            System.out.println("Im in Method");
            // do sum stuff
            return <Obj-List>;
        }
    }
}

我得到了运行时异常,例如:

java.lang.IllegalAccessException: Class "com.TestReflection" can not access a member of class "com.ABC$XYZ" with modifiers "synchronized".

【问题讨论】:

  • 向我们展示引发异常的代码。
  • TestReflection 类不具有 methodOfXYZ() 方法的可见性(由于可见性修饰符和实际代码的包结构)。您可以通过在调用myMethod.invoke(...) 之前执行myMethod.setAccessible(true) 或修复您的包结构来解决此问题,以便您的反射代码对您尝试反射的方法具有可见性。

标签: java reflection inner-classes synchronized illegalaccessexception


【解决方案1】:

试试这个:

public Class ABC
{
    public Class XYZ 
    {
       public synchronized List methodOfXYZ()
       {
          System.out.println("Im in Method");
         // do sum stuff
         return <Obj-List>;
        }
     }
 }

【讨论】:

  • 感谢您的回复 Mckeown 和 Sam.. 客户端 API 中提供了此类 ABC。所以我不能改变它。课堂上的一个更正是: public Class ABC { Class XYZ implements Runnable { synchronized List methodOfXYZ() { System.out.println("Im in Method"); // 做 sum stuff return ; } } }
猜你喜欢
  • 2014-01-02
  • 1970-01-01
  • 1970-01-01
  • 2012-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-05
  • 2012-06-23
相关资源
最近更新 更多