我有一个带有静态变量的Java类
package com.mytest
public class MyClass{
public static final TextClass TEXT_CLASS = new TextClass();
}
如何TEXT_CLASS
使用反射访问对象?
(我有字符串"com.mytest.MyClass.TEXT_CLASS"
。我需要访问该对象。)
访问静态字段的方式与普通字段完全相同,只是不需要将任何参数传递给Field.get()
方法(可以传递null)。
试试这个:
Object getFieldValue(String path) throws Exception {
int lastDot = path.lastIndexOf(".");
String className = path.substring(0, lastDot);
String fieldName = path.substring(lastDot + 1);
Class myClass = Class.forName(className);
Field myField = myClass.getDeclaredField(fieldName);
return myField.get(null);
}
问题内容: 请参考下面的代码。运行代码时,我可以更改最终非静态变量的值。但是,如果我尝试更改最终静态变量的值,则会抛出异常。 我的问题是,为什么在非静态最终变量也不会抛出异常,反之亦然。为什么会有所不同? 问题答案: 该解决方案并非没有缺点,它可能无法在所有情况下都有效: 如果在字段声明中将字段初始化为编译时常量,则对该字段的更改可能不可见,因为该最终字段的使用会在编译时用编译时常量替换。 另一个
问题内容: 我有一堂课,但不幸的是,我需要在运行时更改它。 使用反射我得到这个错误: 有什么办法可以改变价值? 问题答案: 假设没有阻止你执行此操作,则可以使用来绕开并重置修饰符以摆脱,并实际上修改字段。 这是一个例子: 假设没有SecurityException抛出,上面的代码将打印出来”Everything is true”。 实际执行的操作如下: 基本boolean值true和falsein
我在工作时遇到了这种特殊的行为,但我不确定这是什么问题。根据我,“静态”关键字有一些特性 1.属于类而不是对象。 < b>2。静态方法可以访问类的静态实例变量。 但是,有人可以解释一下特定的行为吗: 在编写这一行时,我在Eclipse中打印语句“this.x”时遇到complile时间错误,因为“不能在静态conetext”。 有人能解释一下我的理解中缺少了什么吗??
问题内容: 基于使用Java反射更改私有静态最终字段,我尝试设置私有静态最终字段。 (我知道这非常骇人,但是这个问题与代码质量无关;与Java反射有关。) 此打印 我已经使用OpenJDK 6和7,以及Oracle 7进行了尝试。 我不知道Java反射可以提供什么保证。但是,如果失败了,我以为会有一个(实际上所有反射方法都会抛出异常)。 这是怎么回事 问题答案: Java内联字段可在编译时初始化为
使用Java反射更改私有静态final字段 我按照上面链接中的说明使用java反射更改私有静态final字段。我有一个名为“数据”的对象在“data”内部,有一个名为“type”的私有静态最终变量我想将“type”设置为null。这是我的密码。 我试着在Java1.7上用类似的代码来做这件事,结果成功了。但是在Android上运行此代码会产生以下错误:java。lang.NoSuchFieldEx
我是Java的初学者。我正在学习最终变量,并尝试了这段代码。 然而,Eclipse给了我一个错误。 我做错了什么?如何将所有对象的最终变量设置为静态?