如何从另一个类访问私有对象?

AMD*_*MDG 2 java field

是否有一些直接或间接的方法可以从另一个类访问私有对象?

Mak*_*oto 5

嗯,反思真的是你对这个的唯一希望。这将是您无需过多关注其可见性修饰符即可检查对象字段的唯一方法。

Entity entity = new Entity();
for(Field f : entity.getClass().getDeclaredFields()) {
    try {
        f.setAccessible(true);
        System.out.println(f.get(entity));
    } catch(IllegalAccessException e) {
        e.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我确实想强烈警告您重置该字段的可访问性。

如果您在高并发环境中运行,并且在完成后立即禁用可访问性,您将遇到在一个线程中删除可访问性的情况,因为您将要在另一个线程中阅读它,这将导致一个巨大的、令人困惑的混乱。

在这一点上,您拥有可见性修饰符这一事实变得没有实际意义,您可能只想使用 part-and-parcel getter(或者将字段设为public,这让很多人感到奇怪)。