当前位置: 首页 > 面试题库 >

使用反射设置字段值

充运浩
2023-03-14
问题内容

我正在与一个非开源项目合作,我需要修改一个或多个其类。

在一个类中是以下集合:

private Map<Integer, TTP> ttp = new HashMap<>();

我需要做的就是在这里使用反射和并发hashmap。我试过下面的代码,但是不起作用。

Field f = ..getClass().getDeclaredField("ttp");
f.setAccessible(true);
f.set(null, new ConcurrentHashMap<>());

问题答案:

希望这是您要尝试做的事情:

import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

public class Test {

    private Map ttp = new HashMap();

    public  void test() {
        Field declaredField =  null;
        try {

            declaredField = Test.class.getDeclaredField("ttp");
            boolean accessible = declaredField.isAccessible();

            declaredField.setAccessible(true);

            ConcurrentHashMap<Object, Object> concHashMap = new ConcurrentHashMap<Object, Object>();
            concHashMap.put("key1", "value1");
            declaredField.set(this, concHashMap);
            Object value = ttp.get("key1");

            System.out.println(value);

            declaredField.setAccessible(accessible);

        } catch (NoSuchFieldException 
                | SecurityException
                | IllegalArgumentException 
                | IllegalAccessException e) {
            e.printStackTrace();
        }

    }

    public static void main(String... args) {
        Test test = new Test();
        test.test(); 
    }
}

它打印:

value1


 类似资料:
  • 这是我得到的错误(在setMOTD的最后第二行):

  • 问题内容: 我有2类:和 通过反思,我想在课堂上设置: 但我有一个例外: 线程“主”中的异常java.lang.NoSuchFieldException:a_field 但是,如果我尝试: 有用。 使用setter方法我有同样的问题: 问题答案: 要访问私有字段,您需要设置为true。您可以离开超类领域。此代码有效:

  • 问题内容: 我有以下结构,并且需要某些字段为空,所以我使用指针,主要是处理sql空值 所以当我执行以下操作时,我可以看到json结果中的值类型可以为null 但是当我尝试使用反射完成所有操作时 我从反射部分得到的是以下错误 我究竟做错了什么? 这是一个GoPlay http://play.golang.org/p/0xt45uHoUn 问题答案: Reflection.Value.Set仅接受作为

  • 问题内容: 基于使用Java反射更改私有静态最终字段,我尝试设置私有静态最终字段。 (我知道这非常骇人,但是这个问题与代码质量无关;与Java反射有关。) 此打印 我已经使用OpenJDK 6和7,以及Oracle 7进行了尝试。 我不知道Java反射可以提供什么保证。但是,如果失败了,我以为会有一个(实际上所有反射方法都会抛出异常)。 这是怎么回事 问题答案: Java内联字段可在编译时初始化为

  • 问题内容: 我无法获取字段值。我想做的是在运行时获取对象。请让我知道我要去哪里了。 测试类 } EX.class } 问题答案: 像这样 或者,您可以使用类的方法在运行时获取对象的实例。您仍然需要首先设置该实例变量,否则它将没有任何值。 例如 或者,在其构造函数中有两个参数的地方,例如String和int … 或者您可以在运行时使用它为其构造函数查询 注意:我特意省略了将在此创建的对象强制转换为预

  • 问题内容: 我试图以一种通用的方式比较两个不同对象的字段值。我有一个函数(如下所示),该函数接受两个Object,然后获取字段,然后在循环中比较这些字段,如果它们不相同,则将这些字段添加到列表中- 这是执行此操作的正确方法吗? 我在谷歌上搜索,发现C#就像一个PropertyInfo类- Java是否有类似的东西?另外,有没有办法做-我知道没有这样的方法,但也许还有另一种方法? 问题答案: 您可以