gpt4 book ai didi

java - 反射访问嵌套类的值

转载 作者:行者123 更新时间:2023-12-02 03:30:11 27 4
gpt4 key购买 nike

我知道这是糟糕的代码设计,但作为临时黑客......

我需要访问一个私有(private)映射,其中的值是静态嵌套类的初始化。在下面的示例中,我想从不同的包访问 myMap 的每个值。

package belongs.to.someone.else

public class SOExample {
private Map<String, NestedClass> myMap;

static class NestedClass {
final int data;
NestedClass(final int data) {
this.data = data;
}
}

public void populateMyMap(){
for(int i=0; i<100; i++){
this.myMap.put(Integer.toString(i), new NestedClass(i));
}
}
}

但是在尝试将 SOExample.myMap 字段设置为可访问时,我似乎遇到了先有鸡还是先有蛋的问题。对于最后一条语句中的 SOExample.NestedClass 值,我收到“无法从包外部访问”错误。

package belongs.to.me
public class SOExampleMyPackage {
public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
SOExample example = new SOExample();
example.populateMyMap();

// Make the example.myMap field accessible
Field f = example.getClass().getDeclaredField("myMap");
f.setAccessible(true);
// Next line throws error
Map<String, SOExample.NestedClass> myMapHere = (Map<String, SOExample.NestedClass>) f.get(example);
}
}

我很欣赏有关如何解决此问题的任何想法。

最佳答案

由于嵌套类不可访问,您会收到编译时错误。

您唯一能做的就是避免使用此类的引用:

Field f = example.getClass().getDeclaredField("myMap");
f.setAccessible(true);
Map map = (Map) f.get(example);
Object obj = map.get("1");

您可以访问 obj 上的字段并调用方法带反射的实例。

关于java - 反射访问嵌套类的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38212502/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com