gpt4 book ai didi

java - 反射 - 如何为其实例使用反射创建的 POJO 类设置值

转载 作者:行者123 更新时间:2023-12-01 18:49:59 26 4
gpt4 key购买 nike

我已经使用反射为我的 pojo 类创建了一个实例,如下所示:

package com.hexgen.tools;

public class Foo {

public static void main(String[] args) {
Class c = null;
try {
c = Class.forName("com.hexgen.ro.request.CreateRequisitionRO");
Object o = c.newInstance();
System.out.println(o.toString());
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IllegalAccessException iae) {
iae.printStackTrace();
} catch (InstantiationException ie) {
ie.printStackTrace();
}
}
}

当我打印时,我得到以下字符串:

com.hexgen.ro.request.CreateRequisitionRO@95c7850[transSrlNo=<null>,transCode=<null>,inflowOutflow=<null>,transDate=<null>,tradeDate=<null>,tradeDateUpto=<null>,tradeTime=<null>,investCategory=<null>,custodian=<null>,holdType=<null>,securityType=<null>,security=<null>,assetClass=<null>,issuer=<null>,fundManager=<null>,marketType=<null>,tradePriceType=<null>,requisitionType=<null>,priceFrom=<null>,priceTo=<null>,marketPrice=<null>,averagePrice=<null>,quantity=<null>,price=<null>,grossAmtTcy=<null>,exchRate=<null>,grossAmtPcy=<null>,grossIntTcy=<null>,grossIntPcy=<null>,netAmountTcy=<null>,netAmountPcy=<null>,acquCostTcy=<null>,acquCostPcy=<null>,yieldType=<null>,purchaseYield=<null>,marketYield=<null>,ytm=<null>,mduration=<null>,currPerNav=<null>,desiredPerNav=<null>,currHolding=<null>,noofDays=<null>,realGlPcy=<null>,realGlTcy=<null>,nowLater=<null>,isAllocable=false,acquCostReval=<null>,acquCostHisTcy=<null>,acquCostHisPcy=<null>,exIntTcy=<null>,exIntPcy=<null>,accrIntReval=<null>,accrIntTcy=<null>,accrIntPcy=<null>,grossAodTcy=<null>,grossAodPcy=<null>,grossAodReval=<null>,bankAccAmtAcy=<null>,bankAccAmtPcy=<null>,taxAmountTcy=<null>,unrelAmortTcy=<null>,unrelAmortPcy=<null>,unrelGlTcy=<null>,unrelGlPcy=<null>,realGlHisTcy=<null>,realGlHisPcy=<null>,tradeFeesTcy=<null>,tradeFeesPcy=<null>,investReason=<null>,settleDate=<null>,stkSettleDate=<null>,custodianN=<null>,portfolio=<null>,userId=<null>]

实际上所有值都设置为 null,我想为类中可用的 setter 设置值。由于 setter 名称可以随时更改,因此我计划动态设置值,这样就不会发生静态值设置。

是否可以为新创建的实例动态设置值?就像创建一些枚举并在枚举中设置一些默认值一样,如果它是字符串,则设置一些默认值,如果 int 设置一些默认值,就像这样。

how to do this also i created a object which is not a array if i want to create array of objects using reflection how to go about it?

请帮我找出并解决这些问题..

最佳答案

根据定义,POJO 没有标准制定者。我怀疑你指的是 JavaBean。

要使用 JavaBean 的 setter,最简单的方法是使用 Introspector

public class Main {
public static void main(String... ignored) throws Exception {
SimpleBean sb = new SimpleBean();

BeanInfo info = Introspector.getBeanInfo(SimpleBean.class);
System.out.println("Calling setters");
for (PropertyDescriptor pd : info.getPropertyDescriptors()) {
if (pd.getWriteMethod() == null) continue;
System.out.println("\tSetting " + pd.getName());
pd.getWriteMethod().invoke(sb, "Set now");
}
System.out.println("Reading the getters");
for (PropertyDescriptor pd : info.getPropertyDescriptors()) {
System.out.println("\t" + pd.getName() + " = " + pd.getReadMethod().invoke(sb));
}
}


public static class SimpleBean {
String text;
String words;

public String getText() {
return text;
}

public void setText(String text) {
this.text = text;
}

public String getWords() {
return words;
}

public void setWords(String words) {
this.words = words;
}
}
}

打印

Calling setters
Setting text
Setting words
Reading the getters
class = class Main$SimpleBean
text = Set now
words = Set now

关于java - 反射 - 如何为其实例使用反射创建的 POJO 类设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16189566/

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