gpt4 book ai didi

java - 如何获得嵌套属性的方法?

转载 作者:行者123 更新时间:2023-11-30 07:35:23 24 4
gpt4 key购买 nike

我有一个 Foo 类,它有一个 Bar 类型的属性。

public class Foo {
public Bar getBar() {

}
}

public class Bar {
public String getName();
}

是否有帮助器类或方法使用 Foo.class 为 Bar 的 name 属性获取 java.lang.reflect.Method 对象 和“bar.name”?

Commons BeanUtils中有一个名为PropertyUtils的类,但是它的getPropertyDescriptor()只对Object实例有效,对Class无效 个实例。

我意识到实现一个一点也不难,但我想利用现有的东西。

此外,我需要一个 Method 对象这一事实并不是糟糕设计的结果(希望不是)。我正在做的几乎是一个 JavaBeans 编辑器。

谢谢!

最佳答案

这里是嵌套支持:根据用例,可以缓存检索到的类。例如,在使用大量过滤的数据表 crud 应用程序中。

/**
* Retrieves the type of the property with the given name of the given
* Class.<br>
* Supports nested properties following bean naming convention.
*
* "foo.bar.name"
*
* @see PropertyUtils#getPropertyDescriptors(Class)
*
* @param clazz
* @param propertyName
*
* @return Null if no property exists.
*/
public static Class<?> getPropertyType(Class<?> clazz, String propertyName)
{
if (clazz == null)
throw new IllegalArgumentException("Clazz must not be null.");
if (propertyName == null)
throw new IllegalArgumentException("PropertyName must not be null.");

final String[] path = propertyName.split("\\.");

for (int i = 0; i < path.length; i++)
{
propertyName = path[i];
final PropertyDescriptor[] propDescs = PropertyUtils.getPropertyDescriptors(clazz);
for (final PropertyDescriptor propDesc : propDescs)
if (propDesc.getName().equals(propertyName))
{
clazz = propDesc.getPropertyType();
if (i == path.length - 1)
return clazz;
}
}

return null;
}

关于java - 如何获得嵌套属性的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4542129/

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