gpt4 book ai didi

Java通过反射找到setter和getter

转载 作者:行者123 更新时间:2023-11-29 07:48:31 26 4
gpt4 key购买 nike

我有这样的课

public class Student
{

private String reference;
private String aPlaceAt;
//methods generate by Netbeans Eclipse generates the same methods
public String getaPlaceAt(){return aPlaceAt;}
public void setaPlaceAt(String aPlaceAt){this.aPlaceAt = aPlaceAt;}
public String getReference(){return reference;}
public void setReference(String reference){this.reference = reference;}
}

稍后我需要通过反射找到每个属性的 setter 和 getter 我正在使用以下代码

public Method findSetterFor(final Class clazz,final String propertyName) throws Exception
{
return new PropertyDescriptor(propertyName,clazz).getWriteMethod();
}

for(final Field field:clazz.testClazz.getDeclaredFields())
System.out.println(field.getName()+" "+clazz.findSetterFor(clazz.testClazz,field.getName()));

它们返回正确的 setter 以供引用,但属性 aPlaceAt

抛出

Exception in thread "main" java.beans.IntrospectionException: Method not found: isAPlaceAt

为什么是 APlaceAt?不应该是

public void setaPlaceAt(String aPlaceAt){this.aPlaceAt = aPlaceAt;}?

或者为什么我做错了?怎样才能完成谢谢?

我认为 setter 和 getter 是根据 SO 上的其他帖子和此链接正确生成的

Link

这些方法由 Netbeans 和 Eclipse 以及 intellij 生成

更新这是另一个关于它的热门论坛同样的问题请检查一下

Another SO post

最佳答案

您的 getter/setter 名称不遵循 Java bean 命名约定 (or maybe the do)。对于 PropertyDescriptor,根据 javadoc

Note that the property name should start with a lower case character, which will be capitalized in the method names.

应该是

public String getAPlaceAt() {
return aPlaceAt;
}

public void setAPlaceAt(String aPlaceAt) {
this.aPlaceAt = aPlaceAt;
}

错误信息有点误导。内省(introspection)器将尝试查找 getAPlaceAt,然后是 isAPlaceAt。它将报告它尝试但失败的最后一件事。

您可以通过 IDE 生成 setter/getter 来避免此类错误。

关于Java通过反射找到setter和getter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23343732/

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