Tag: reflection

通过reflection访问Java中的私有变量

我正在尝试编写一个方法,使用reflection在类中获取私有字段。 这是我的课程(本例简化): public class SomeClass { private int myField; public SomeClass() { myField = 42; } public static Object getInstanceField(Object instance, String fieldName) throws Throwable { Field field = instance.getClass().getDeclaredField(fieldName); return field.get(instance); } } 所以说我这样做: SomeClass c = new SomeClass(); Object val = SomeClass.getInstanceField(c, “myField”); 我收到了IllegalAccessException因为myField是私有的。 有没有办法使用reflection获取/设置私有变量? (我是用C#完成的,但这是我第一次用Java编写它)。 如果你想知道为什么需要做这样的疯狂:),这是因为有时在unit testing期间将私有变量设置为失败测试的伪值等是很方便的。

Field.get(obj)返回注入的CDI托管bean上的所有空值,而手动调用getter则返回正确的值

我试图通过reflection从JSF页面的支持bean访问某些字段的值。 问题是,当我使用getter时,我得到了正确的值但是当我使用必要字段的get(obj)方法时,我总是得到一个返回的null值。 获取beanObject: ELContext elcontext = FacesContext.getCurrentInstance().getELContext(); Object beanObject = FacesContext.getCurrentInstance().getApplication().getELResolver().getValue(elcontext, null, beanName); 要在不使用getter的情况下获取字段值,请执行以下操作: List fields = new ArrayList(); ParamsBuilder.getAllFields(fields, beanClass); for(Field field: fields) { field.setAccessible(true); System.out.println(field.getName() + “: ” + field.get(beanObject)); //just to see if it works } getAllFields方法具有以下实现: public static List getAllFields(List fields, Class type) { for (Field field: type.getDeclaredFields()) { fields.add(field); } […]

Java动态函数调用

我有一个String数组,其中包含yyyyyy类中方法的名称 在xxxxxx类中,我正在创建一个yyyyyy实例(比如obj )。 现在我可以调用obj.function_name() ,除了我想从循环中的String数组中读取function_name 。 这可能吗?

使用Java动态创建类

我试图找到有关这方面的信息,但空手而归: 我收集它可以使用reflection或代理在Java中动态创建一个类,但我不知道如何。 我正在实现一个简单的数据库框架,我使用reflection创建SQL查询。 该方法获取具有数据库字段作为参数的对象,并基于该创建查询。 但是如果我还可以动态创建对象本身就非常有用,所以我不需要为每个表都有一个简单的数据包装器对象。 动态类只需要简单的字段( String , Integer , Double ),例如 public class Data { public Integer id; public String name; } 这有可能,我该怎么做? 编辑:这是我将如何使用它: /** Creates an SQL query for updating a row’s values in the database. * * @param entity Table name. * @param toUpdate Fields and values to update. All of the […]

对象reflection的安全风险是什么?

因此,经过几个小时的解决方案,目前在Google App Engine上禁用了Reflection的限制,我想知道是否有人可以帮助我理解为什么对象reflection会成为一种威胁。 是因为我可以检查一个类的私有变量还是有其他更深层次的原因?

使用reflection更改静态最终File.separatorChar进行unit testing?

具体来说,我正在尝试为一个方法创建一个unit testing,该方法需要使用File.separatorChar在windows和unix上构建路径。 代码必须在两个平台上运行,但当我尝试更改此静态final字段时,我会收到JUnit错误。 任何人都知道发生了什么事吗? Field field = java.io.File.class.getDeclaredField( “separatorChar” ); field.setAccessible(true); field.setChar(java.io.File.class,’/’); 当我这样做时,我明白了 IllegalAccessException: Can not set static final char field java.io.File.separatorChar to java.lang.Character 思考?

reflection是否打破了私有方法的想法,因为私有方法可以在类之外访问?

反思是否打破了私有方法的想法? 因为可以从类外部访问私有方法吗? (也许我不明白反思的意思或错过别的东西,请告诉我) http://en.wikipedia.org/wiki/Reflection_%28computer_science%29 编辑:如果relection打破了私有方法的想法 – 我们是否仅将私有方法用于程序逻辑而不用于程序安全性? 谢谢

System.out声明为static final并用null初始化?

当我通过System.class我发现了一些对我来说很奇怪的东西。 当您查看System.in, System.out, System.err的声明时System.in, System.out, System.err这些声明为final static但也使用null初始化 public final static InputStream in = null; public final static PrintStream out = null; public final static PrintStream err = null; 由于final只能初始化一次然后如何管理? 当我们使用System.out.print(“…”); 很明显, out不是null而是final static如何不为null ? 那么任何人都可以解释如何初始化已经宣布为最终的?

如何在运行时获取generics类型?

这是我的代码:ExecutorImp扩展了AbstractExecutor,它提取了其实现者的相同执行逻辑(ExecutorImp就是一个例子),当调用ExecutorImp的execute()方法时,它将调用其超类型中的方法,但是超类型(AbstractExcutor) )应该知道另一个绑定到实现者的类(在示例中,它是User类): import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; abstract class AbstractExecutor { public void execute() throws Exception { ArrayList list = new ArrayList(); // here I want to get the real type of ‘E’ Class cl = this.getClass().getTypeParameters()[0].getGenericDeclaration().getClass(); Object o = cl.getConstructor(String.class).newInstance(“Gate”); list.add((E) o); System.out.println(format(list)); } public abstract String format(ArrayList list); public abstract String getType(); } public […]