为什么无法使用公共静态方法?

镇权:

我试图反映parse(CharSequence, DateTimeFormatter)每个扩展TemporalAccessor该类的类中的方法。

    private static final Map<Class<?>, MethodHandle> PARSE_HANDLES = synchronizedMap(new HashMap<>());

    static <T extends TemporalAccessor> MethodHandle parseMethodHandle(final Class<T> clazz) {
        if (clazz == null) {
            throw new NullPointerException("clazz is null");
        }
        return PARSE_HANDLES.computeIfAbsent(clazz, k -> {
            try {
                final Method method = clazz.getMethod("parse", CharSequence.class, DateTimeFormatter.class);
                log.debug("method: {}, {}", method, method.isAccessible());
                // i don't understand; public static method is not accessible? yet it isn't.
                assert method.isAccessible(); // NOT GOOD with UTs
                return MethodHandles.lookup().unreflect(method);
            } catch (final ReflectiveOperationException roe) {
                throw new RuntimeException(roe);
            }
        });
    }

YearMonth课堂上,我明白了这一点。

method: public static java.time.YearMonth java.time.YearMonth.parse(java.lang.CharSequence,java.time.format.DateTimeFormatter), false

为什么public static无法访问方法?

TJ Crowder:

请参阅文档isAccessible

不建议使用此方法,因为它的名称暗示它实际上指示是否禁止对Java语言访问控制的检查时,检查反射对象是否可访问。该方法可以false在调用者可访问的反射对象上返回要测试此反射对象是否可访问,应使用canAccess(Object)

(我的重点。)

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么NPE使用DatatypeConverter的静态方法?

为什么 --> “ListPopupWindow:无法调用 getMaxAvailableHeightMethod.... 使用公共版本”?

为什么单元测试无法访问模型中的公共静态常量?

为什么无法在main()函数中定义类的静态(公共)成员?

为什么@decorator无法修饰静态方法或类方法?

为什么super()无法与__new__以外的静态方法一起使用?

为什么单例getInstance方法必须在Java中是公共静态的

为什么在内部类中使用公共方法?

为什么方法无法识别指向静态变量的变量?

java扩展静态方法,无法编译,为什么?

为什么不能在公共静态字符串上使用串联

为什么在类中有公共静态类

为什么可以通过静态调用-PHP访问公共功能?

为什么未定义我的公共静态数组?

为什么Throwable.fillInStackTrace()方法是公共的?为什么有人使用它?

为什么不应该使用静态导入的Mockito方法?

为什么使用单例而不是静态方法?

为什么在Java中使用静态助手方法不好?

为什么在使用静态导入时不能将扩展方法称为静态方法?

公共静态变量的最佳替代方法是什么?

PHP静态方法-“静态函数”和“公共静态函数”之间有什么区别?

为什么我们不能在(非静态)内部类中使用静态方法?

静态方法是邪恶的,那么Laravel为什么要使用这么多的静态调用?

为什么静态最终变量使用静态方法初始化需要同步?

为什么将静态方法视为方法?

在静态上下文中使用实例方法时,为什么javac会发出“错误:类中的方法无法应用于给定类型”?

为什么从非静态方法访问静态方法不好?

为什么从静态方法访问非静态方法是错误的设计

为什么如果静态方法不涉及多态性(后期绑定),为什么会看到无法覆盖静态方法的错误