当前位置: 首页 > 知识库问答 >
问题:

在尝试调用反射方法时引发

葛磊
2023-03-14
static void setFinalStatic(Field field, Object newValue) throws Exception {
        field.setAccessible(true);
        Field modifiersField = Field.class.getDeclaredField("modifiers");
        modifiersField.setAccessible(true); 
        modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
        field.set(null, newValue);
    }
 Time elapsed: 2.383 s  <<< FAILURE!

java.lang.NoSuchFieldException: modifiers
        at java.base/java.lang.Class.getDeclaredField(Class.java:2412)
public class MyApiService extends RestApiService {



    private MyApiService(String baseURL, String user, String password) {
        super(baseURL, user, password);

    }


    /**
     * Singleton holder class for the MyApiService object
     */
    private static class SingletonHolder {
        private static final ACPConfig ACP_CONFIG = (ACPConfig) 
        private static final Config PLATFORM_AO_CONFIG = ACP_CONFIG.newConfig
                .getConfig(“def”)
                .getConfig("abc”);
        private static final String BASE_URL = PLATFORM_AO_CONFIG.getString("url");
        private static final String USER = PLATFORM_AO_CONFIG.getString("user");
        private static final String PASSWORD = PLATFORM_AO_CONFIG.getString("password");
        private static final MyApiService INSTANCE = new MyApiService(BASE_URL, USER, PASSWORD);
    }

    /**
     * Creates a singleton object of this class
     *
     * @return <code>MyApiService</code> singleton object
     */
    public static MyApiService getInstance() {
        return SingletonHolder.INSTANCE;
    }
for (Class nclass : MyApiService.class.getDeclaredClasses()) {
    System.out.println("SimpleName is "+nclass.getSimpleName());
    if (nclass.getSimpleName().equals("SingletonHolder")) {
        sclass = nclass;

        System.out.println(" sclass is " + sclass.getSimpleName());

        for (Field field : sclass.getDeclaredFields()) {
            System.out.println("Field names are " + field.getName());
        }

        setFinalStatic(sclass.getDeclaredField("PLATFORM_AO_CONFIG"), null);
        setFinalStatic(sclass.getDeclaredField("USER "), null);
        setFinalStatic(sclass.getDeclaredField(" PASSWORD"), null);
        break;
    }
}

共有1个答案

堵宏毅
2023-03-14

不能更改静态final字段。这并不是因为这是规则(它确实是),而是因为当您的代码运行时,字段甚至不再存在。在任何地方使用它,编译器只是使用该值。所以这两个代码块编译成完全相同的。

someObject.callSomeMethod(12);

而且

static final int INCHES_PER_FOOT = 12;

someObject.callSomeMethod(INCHES_PER_FOOT);

所以,基本上,您要求使用反射将数字12更改为其他的东西。尝试都没有意义。

 类似资料:
  • 问题内容: 我在递归反射函数中调用方法时遇到麻烦。这里是: 我用以下函数调用该函数: 我希望获得的解析方法在我正在打印方法的地方,并针对它运行.Call()。相反,它是打印出来的:我不能反对。 我想我无法将每个方法的返回值都放在头上。我知道我必须使用ValueOf来提取值,但似乎我尝试了任何置换,都是从反射类本身获取方法的:-p 感叹 问题答案: 问题在于该方法在指针接收器上,但是该函数正在与赋值

  • 问题内容: 我收到以下错误 尝试在空对象引用上调用虚拟方法’void android.widget.StackView.setAdapter(android.widget.Adapter)’ 在这条线上 完整的片段 EventsFragment.java 是 Stack_Adapter.java Stack_Items 问题答案: 您正在执行: 你是。返回。 你为什么用? 在哪里?您应该从正确的x

  • 我在使用 firebase firestore 时收到一个空指针引用,我的应用崩溃了。这是我的代码: 这里的sem指的是我的文档17030121084中的字段。 有人能对此提出解决方案吗?

  • 我的应用程序有问题,想解决它,但我无法访问解决方案,请帮帮我,,

  • 每当我尝试使用firebase auth注册用户时,我的应用程序就会崩溃。我的代码如下:

  • 我正在尝试实现一个外部色轮,它应该出现在的片段一直在崩溃我的应用程序。我想我明白为什么会发生这种情况,但是在尝试修复它大约6个小时后,我就要放弃了。我知道之前有人问过这个问题,但是我无法为我的特定问题导出一个修复程序。下面是我的代码: 这是Logcat错误: 如果有人能帮我解决这个问题,那就太好了。提前谢谢^^ 编辑:这是我的XML,按要求: