gpt4 book ai didi

java - 为什么 PropertyDescriptor 会返回一个以大写字母作为第一个字符的属性名称?

转载 作者:搜寻专家 更新时间:2023-11-01 02:38:19 25 4
gpt4 key购买 nike

我正在通过

获取有关类(class)的信息
Introspector.getBeanInfo(this.getClass()).getPropertyDescriptors()

然后通过调用 propery[i].getName() 获取属性的名称。

如果属性没有单字母部分,一切都很好。例如,如果一个属性有一个名称 personAddress(同时它的 getter/setter -> getPersonAddress(), setPersonAddress(String personAddress)),没关系,getName() 返回 personAddress

但是如果属性有一个名称 rPersonId (getRPersonId(), setRPersonId(Long rPersonId)) 然后 getName() 返回“RPersonId”,即首字母已大写!为什么?

根据这个:https://docs.oracle.com/javase/7/docs/api/java/beans/FeatureDescriptor.html :

public String getName()-> Gets the programmatic name of this feature.

那么为什么它会返回一个与其 getter 或 setter 名称相关的名称,而不是属性的真实名称?

最佳答案

这实际上是记录在案的行为。

首先,属性名称完全是通过发现它们的 getter 和 setter 来定位的,而不是通过查看类的字段来定位的。这在 Java Beans specification 的第 8.3 段中指定。 :

If we discover a matching pair of get<PropertyName> and set<PropertyName> methods that take and return the same type, then we regard these methods as defining a read-write property whose name will be <propertyName>.

因此,当您对包含 Long getRPersonId() 的类进行自省(introspection)时和 setRPersonId(Long) ,可以从中提取属性。属性的名称一般遵循小写第一个字母,其余保持不变。但情况并非总是如此,确切的规则在第 8.8 段中:

Thus when we extract a property or event name from the middle of an existing Java name, we normally convert the first character to lower case. However to support the occasional use of all upper-case names, we check if the first two characters of the name are both upper case and if so leave it alone. So for example:

  • FooBah becomes fooBah
  • Z becomes z
  • URL becomes URL

We provide a method Introspector.decapitalize which implements this conversion rule.

在上面的示例中,getter 和 setter 将提供字符串 RPersonId变成属性名称。因为前两个字符是大写的,所以第一个字符不会是小写的。因此,将派生的属性名称是 RPersonId ,这解释了您的输出。

你也可以调用方法 decapitalize 从一对 getter/setter 中查看哪个属性名称:

System.out.println(Introspector.decapitalize("RPersonId"));     // prints RPersonId
System.out.println(Introspector.decapitalize("PersonAddress")); // prints personAddress

关于java - 为什么 PropertyDescriptor 会返回一个以大写字母作为第一个字符的属性名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40822397/

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