`

AccessibleObject: setAccessible(boolean flag)AccessibleObject: setAccessible(boo

    博客分类:
  • java
 
阅读更多
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的访问规则

    `setAccessible()`方法位于`java.lang.reflect.AccessibleObject`类中,这个类是`Constructor`、`Field`、`Method`等类的父类,因此这些类都继承了该方法。`setAccessible()`的主要作用是设置访问权限,允许反射代码...

    Fortify解决方案手册.docx

    Java中存在一个潜在的安全风险,即通过`AccessibleObject.setAccessible(true)`方法,可以绕过访问控制限制,访问和操作私有成员。 **解决方案** 推荐使用Spring框架中的`ReflectionUtils`工具类来安全地调用私有...

    第6讲 动态代理是基于什么原理1

    - 修改访问权限:通过`AccessibleObject.setAccessible(true)`可以绕过访问控制,但这可能带来安全问题。 - 动态调用方法:在运行时根据条件决定调用哪个方法。 - 反射实例化对象:无需知道具体类名,可根据类名动态...

    src-tools1.8源码

    1. **Java反射API的使用**:包括`Class&lt;?&gt;`, `Constructor&lt;?&gt;`, `Method`, `Field`等类的使用,以及`AccessibleObject.setAccessible(true)`来访问私有成员。 2. **AST相关编程**:可能使用了`com.sun.source.tree`...

    649.647.JAVA基础教程_反射-提供结构丰富Person类(649).rar

    对于私有成员的访问,需要设置`AccessibleObject.setAccessible(true)`,这可能引发安全问题。 这个教程将详细讲解如何利用这些概念,通过实际的`Person`类例子,让你理解并熟练运用Java反射机制。学习反射能够帮助...

    最简单java 反射原理示例

    7. 对于私有方法和字段,需要使用`getDeclaredMethod()`和`getDeclaredField()`,并设置`AccessibleObject.setAccessible(true)`使其可访问。 五、注意事项 1. 反射操作可能会抛出异常,如`ClassNotFoundException`...

    Manning - java reflection in action(2005)

    - 反射操作默认受到访问权限限制,若要访问私有成员,需要设置`AccessibleObject.setAccessible(true)`。 7. **实际应用** - 框架开发:Spring框架大量使用反射进行依赖注入和AOP代理。 - 动态代理:Java的`...

    reflection _android_pressure1j1_

    4. 如果需要使用反射,获取到处理图片的相关类或方法,通过Class对象的getDeclaredMethod()或getDeclaredField()来获取私有方法或字段,然后使用AccessibleObject的setAccessible(true)使它们可访问,最后调用invoke...

    JAVA-提高反射效率

    7. **谨慎使用AccessibleObject#setAccessible(true)**:这个方法可以绕过Java安全检查,但也会带来额外的性能成本。只有在绝对必要时才使用,并且确保已充分了解其安全影响。 8. **预热反射代码**:在应用程序启动...

    Java反射机制.工作原理

    3. 在访问私有成员时,考虑使用`AccessibleObject.setAccessible(true)`,但要注意由此带来的安全风险。 4. 使用`Class.getDeclaredMethods()` 和 `Class.getDeclaredFields()` 获取私有和受保护的方法和字段,而非`...

    dotnet 5 静态字段和属性的反射获取 没有想象中那么伤性能.rar

    虽然Java反射的性能也较直接访问略慢,但通过合理设计和使用`java.lang.reflect.AccessibleObject.setAccessible(true)`进行访问控制优化,可以在一定程度上减少性能损失。 总结来说,虽然反射在获取静态字段和属性...

    Java反射机制

    6. **调用类的函数**:可以调用任何类型的函数,包括私有函数,只需先设置`AccessibleObject.setAccessible(true)`即可。 7. **设置/获取类的属性值**:即使属性是私有的,也可以通过反射设置和获取。 8. **动态创建...

    java反射实例

    同时,为了防止安全问题,如访问私有成员,反射操作通常需要`AccessibleObject.setAccessible(true)`来开启访问权限。 在使用反射时,需要注意性能问题,因为反射操作比直接的Java代码执行要慢。此外,过度使用反射...

    java 反射得到某个方法

    同时,为了调用私有方法,可能需要设置`AccessibleObject.setAccessible(true)`,使该方法可访问。 在实际开发中,反射常用于以下场景: 1. **元编程**:在运行时创建和操作对象,实现动态代理。 2. **序列化/反...

    Java反射类中属性方法

    - 对于私有或受保护的字段,需要使用`getDeclaredField()`并设置`AccessibleObject.setAccessible(true)`来绕过访问限制。 6. **调用方法** - `getMethod(String name, Class&lt;?&gt;... parameterTypes).invoke...

    java代码-Accessible

    这个接口是所有反射API中的核心类(如`Class`, `Method`, `Field`等)的基类,它定义了一个`setAccessible(boolean flag)`方法。这个方法用来开启或关闭对特定反射对象的访问权限检查。当`flag`参数为`true`时,即使...

    老生常谈Java反射机制(必看篇)

    在使用反射时,有时需要访问私有或受保护的成员,这时可以使用`AccessibleObject.setAccessible(true)`来暂时取消访问控制检查,但要注意这可能引发安全问题,因此在生产环境中需谨慎使用。 4. **其他功能**: - `...

    JAVA反射机制原理及代码

    5. `AccessibleObject`:`Field`、`Constructor`和`Method`的基类,提供了访问控制权限的设置。 6. `Modifier`:解析和操作类和成员的访问修饰符。 7. `Proxy`:用于动态创建代理类和代理实例,实现接口的动态代理。...

    Java语言的动态属性总结.pdf

    - 使用反射时,如果访问的类或成员不是公开的,那么需要使用setAccessible(true)来允许访问,但这样做可能会破坏封装性。 - 在使用反射构造对象或调用方法时,必须处理好异常,比如ClassNotFoundException、...

Global site tag (gtag.js) - Google Analytics