Java反射isAccessible方法

DPM:

我正在学习反思。当我执行以下代码时:

package main;

import java.lang.reflect.Field;

public class Main {
    public static void main(String[] args) throws NoSuchFieldException, SecurityException {

        Base firstBase = new Base();
        Field firstBaseField = firstBase.getClass().getDeclaredField("protectedBuffer");
        System.out.println(firstBaseField.isAccessible());

    }
}

这是基类:

package main;

public class Base {

    private StringBuffer buffer;
    protected StringBuffer protectedBuffer;
    public StringBuffer buffer2;

}

结果是错误的。但shoudn't它是真实的,因为我可以访问protectedBuffer以这样的方式firstBase.protectedBuffer

约翰 :

那是因为您没有在测试时是否测试Field protectedBuffer是否可访问firstBaseField.isAccessible();

这里发生的是您检查其中的值AccessibleObject是Field的基类。此标志不会告诉您java访问修饰符是否可以访问该字段,它可以告诉您当前是否忽略了这些修饰符。

当您firstBaseField.isAccessible()对它的判断不正确时,仅表示Java访问规则仍然存在,并且不会被反射机制覆盖。

setAccessible()

将此对象的可访问标志设置为指示的布尔值。值为true表示反射对象在使用时应禁止Java语言访问检查。值为false表示所反射的对象应强制执行Java语言访问检查。

编辑

要测试java访问修饰符是否可以访问该字段,您可以尝试访问它并catch IllegalAccessException,例如下面的示例。

Field field = instance.getClass().getDeclaredField("someField");
//  IllegalAccessException
field.get(instance);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

来自分类Java

可以在Java方法参考使用反射来代替

来自分类Java

Java反射调用重载方法Area.equals(Area)

来自分类Java

如何使用反射(Java)调用私有静态方法?

来自分类Java

Java反射API:调用不带参数的方法

来自分类Java

通过反射创建对象时,如何覆盖Java中的方法?

来自分类Java

使用Java反射调用setter方法

来自分类Java

通过反射在Java中调用泛型方法

来自分类Java

Java使用反射调用类的main()方法

来自分类Java

检查Java反射调用的正确方法?

来自分类Java

Java中类型安全的方法反射

来自分类Java

如何通过Java中的反射获取方法参数的值?

来自分类Java

Java反射getConstructor方法

来自分类Java

Android / Java:使用反射调用方法吗?

来自分类Java

Java:通过反射访问对象的bean类型方法

来自分类Java

Java:使用反射注入字段的最快方法是什么?

来自分类Java

Java反射方法调用产生结果的速度比字段更快?

来自分类Java

使用Java反射创建eval()方法

来自分类Java

使用Java反射调用匿名类的方法时的访问异常

来自分类Java

Java反射与方法声明不一致

来自分类Java

Java反射,其中方法参数是接口

来自分类Java

如何使用反射在Java中调用void方法

来自分类Java

Java反射错误Java.lang.NoSuchMethodException,但是方法存在

来自分类Java

Java反射-使用int [] []参数调用方法

来自分类Java

仅通过反射调用的Java方法。注释?

来自分类Dev

Java反射:wait()方法重复三次。为什么?

来自分类Dev

Java反射-如何调用getter / setter方法?

来自分类Dev

我如何获取Java反射方法对象的`signature`字段

来自分类Dev

使用Java反射显示Java类中可用的方法注释

来自分类Dev

Java反射-找不到方法

TOP 榜单

热门标签

归档