gpt4 book ai didi

java - 使用 java.bean API 检查非公共(public)类的实例

转载 作者:行者123 更新时间:2023-11-29 06:00:20 24 4
gpt4 key购买 nike

我正在尝试使用 Clojure 的 (bean obj) 来检索与对象相关的不可变映射。

在 Clojure 1.4.0 标准库中,它的实现大致如下(翻译成伪代码,旨在让不熟悉 Clojure 的人可以访问):

import java.beans.PropertyDescriptor;
import java.beans.Introspector;

function introspect(Object obj) {
Class clazz = obj.getClass();
PropertyDescriptor descriptors[] =
Introspector
.getBeanInfo(clazz)
.getPropertyDescriptors();
Map retval = new HashMap();

for(pd in descriptors) {
name = pd.getName();
method = pd.getReadMethod();
if(method.getParameterTypes().length != 0)
continue;
retval.set(name, method.invoke(obj, nil));
}
/* the real implementation does more magic below here,
but the above is sufficient for this question */
return retval;
}

在大多数情况下,这工作正常 -- java.bean.Introspector默认不返回非公共(public)方法 BeanInfo执行。但是,当被检查的对象是非公共(public)类的实例时,它会返回该类的公共(public)方法——即使在不引发 IllegalArgumentException(“Can' t 调用非公共(public)类的公共(public)方法").

如何解决这个问题?我正在查看 java.lang.Class 的文档,而且我没有看到一种明显的方法来确定不涉及 java.lang.SecurityException 的 try/catch block 的类的权限。 ......这并不完全让我觉得可能是最佳实践。此外,在非公共(public)类上的方法实现公共(public)接口(interface)的情况下,应该可以使用某种机制来确定可以安全地调用该方法。

最佳答案

你可以发现一个类的修饰符,所以像这样的东西应该允许你检查一个对象是否是一个私有(private)类的实例(没有经过严格测试)

public boolean isInstanceOfPrivateClass(Object o) {
return Modifier.isPrivate(o.getClass().getModifiers());
}

关于java - 使用 java.bean API 检查非公共(public)类的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10388413/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com