import java.lang.reflect.Field;
/**
* Created by IntelliJ IDEA.
* User: zhangchuanlong
* Date: 12-4-7
* Time: 下午9:49
* To change this template use File | Settings | File Templates.
*/
public class Feflection {
public static void initIntFields(final Object obj) {
try {
Field[] fields = obj.getClass()
.getDeclaredFields();
for (int idx = 0; idx < fields.length; idx++) {
if (fields[idx].getType() == int.class) {
fields[idx].setAccessible(true);
fields[idx].setInt(obj, 0);
}
}
} catch (final IllegalAccessException ex) {
throw new RuntimeException(ex);
}
}
public static void main(String[] args)
{
SomeNumbers value = new SomeNumbers();
System.out.println("Before: " + value);
initIntFields(value);
System.out.println("After: " + value);
}
}
class SomeNumbers
{
/** A demo double. */
public double a = 21.25d;
/** A demo float. */
public float b = 54.5f;
/** A Demo int */
public int c = 5665;
/** Another demo int. */
public int d = 2043;
/** Another demo int. */
protected int e = 3121;
/** Another demo int. */
private int f = 1019;
/**
* @see java.lang.Object#toString()
*/
public String toString() {
return new String("[a=" + a + ", b=" + b + ", c=" + c + ", d=" + d + ", e=" + e
+ ", f=" + f + "]");
}
}
分享到:
相关推荐
`setAccessible()`方法位于`java.lang.reflect.AccessibleObject`类中,这个类是`Constructor`、`Field`、`Method`等类的父类,因此这些类都继承了该方法。`setAccessible()`的主要作用是设置访问权限,允许反射代码...
Java中存在一个潜在的安全风险,即通过`AccessibleObject.setAccessible(true)`方法,可以绕过访问控制限制,访问和操作私有成员。 **解决方案** 推荐使用Spring框架中的`ReflectionUtils`工具类来安全地调用私有...
- 修改访问权限:通过`AccessibleObject.setAccessible(true)`可以绕过访问控制,但这可能带来安全问题。 - 动态调用方法:在运行时根据条件决定调用哪个方法。 - 反射实例化对象:无需知道具体类名,可根据类名动态...
1. **Java反射API的使用**:包括`Class<?>`, `Constructor<?>`, `Method`, `Field`等类的使用,以及`AccessibleObject.setAccessible(true)`来访问私有成员。 2. **AST相关编程**:可能使用了`com.sun.source.tree`...
对于私有成员的访问,需要设置`AccessibleObject.setAccessible(true)`,这可能引发安全问题。 这个教程将详细讲解如何利用这些概念,通过实际的`Person`类例子,让你理解并熟练运用Java反射机制。学习反射能够帮助...
7. 对于私有方法和字段,需要使用`getDeclaredMethod()`和`getDeclaredField()`,并设置`AccessibleObject.setAccessible(true)`使其可访问。 五、注意事项 1. 反射操作可能会抛出异常,如`ClassNotFoundException`...
- 反射操作默认受到访问权限限制,若要访问私有成员,需要设置`AccessibleObject.setAccessible(true)`。 7. **实际应用** - 框架开发:Spring框架大量使用反射进行依赖注入和AOP代理。 - 动态代理:Java的`...
4. 如果需要使用反射,获取到处理图片的相关类或方法,通过Class对象的getDeclaredMethod()或getDeclaredField()来获取私有方法或字段,然后使用AccessibleObject的setAccessible(true)使它们可访问,最后调用invoke...
7. **谨慎使用AccessibleObject#setAccessible(true)**:这个方法可以绕过Java安全检查,但也会带来额外的性能成本。只有在绝对必要时才使用,并且确保已充分了解其安全影响。 8. **预热反射代码**:在应用程序启动...
3. 在访问私有成员时,考虑使用`AccessibleObject.setAccessible(true)`,但要注意由此带来的安全风险。 4. 使用`Class.getDeclaredMethods()` 和 `Class.getDeclaredFields()` 获取私有和受保护的方法和字段,而非`...
虽然Java反射的性能也较直接访问略慢,但通过合理设计和使用`java.lang.reflect.AccessibleObject.setAccessible(true)`进行访问控制优化,可以在一定程度上减少性能损失。 总结来说,虽然反射在获取静态字段和属性...
6. **调用类的函数**:可以调用任何类型的函数,包括私有函数,只需先设置`AccessibleObject.setAccessible(true)`即可。 7. **设置/获取类的属性值**:即使属性是私有的,也可以通过反射设置和获取。 8. **动态创建...
同时,为了防止安全问题,如访问私有成员,反射操作通常需要`AccessibleObject.setAccessible(true)`来开启访问权限。 在使用反射时,需要注意性能问题,因为反射操作比直接的Java代码执行要慢。此外,过度使用反射...
同时,为了调用私有方法,可能需要设置`AccessibleObject.setAccessible(true)`,使该方法可访问。 在实际开发中,反射常用于以下场景: 1. **元编程**:在运行时创建和操作对象,实现动态代理。 2. **序列化/反...
- 对于私有或受保护的字段,需要使用`getDeclaredField()`并设置`AccessibleObject.setAccessible(true)`来绕过访问限制。 6. **调用方法** - `getMethod(String name, Class<?>... parameterTypes).invoke...
这个接口是所有反射API中的核心类(如`Class`, `Method`, `Field`等)的基类,它定义了一个`setAccessible(boolean flag)`方法。这个方法用来开启或关闭对特定反射对象的访问权限检查。当`flag`参数为`true`时,即使...
在使用反射时,有时需要访问私有或受保护的成员,这时可以使用`AccessibleObject.setAccessible(true)`来暂时取消访问控制检查,但要注意这可能引发安全问题,因此在生产环境中需谨慎使用。 4. **其他功能**: - `...
5. `AccessibleObject`:`Field`、`Constructor`和`Method`的基类,提供了访问控制权限的设置。 6. `Modifier`:解析和操作类和成员的访问修饰符。 7. `Proxy`:用于动态创建代理类和代理实例,实现接口的动态代理。...
- 使用反射时,如果访问的类或成员不是公开的,那么需要使用setAccessible(true)来允许访问,但这样做可能会破坏封装性。 - 在使用反射构造对象或调用方法时,必须处理好异常,比如ClassNotFoundException、...