第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

獲取Java中類(lèi)的字段名稱(chēng)

獲取Java中類(lèi)的字段名稱(chēng)

慕尼黑8549860 2023-06-14 16:15:05
我正在嘗試以自動(dòng)方式為 Java 類(lèi)的字段生成 CSV 映射,因?yàn)槲倚枰啻问褂盟?。我有以下嘗試獲取字段名稱(chēng)的方法:(其中 CSV 標(biāo)頭類(lèi)似于“DB_NAME|FIELD_NAME|ADDITIONAL_F1|ADDITIONAL_F2”)package util;import java.lang.reflect.Field;public class CsvAttributesMappingGenerator {public static String generateCsvAttributesMapping(Class<?> model) {    StringBuilder csvBuilder = new StringBuilder();    Field[] fieldList = model.getDeclaredFields();    for (Field field : fieldList) {        //field.setAccessible(true);        csvBuilder.append(field.getName().replaceAll("(.)(\\p{Upper})", "$1_$2").toUpperCase());        csvBuilder.append("|");        csvBuilder.append(field.getName());        csvBuilder.append("||\n");    }    return formatOutput(csvBuilder.toString());}private static String formatOutput(String classText) {    String delimiter = "\n******************************\n";    return String.format("%s%s%s", delimiter, classText, delimiter);}}和一個(gè)測(cè)試電話,例如:import objects.User;import org.junit.Test;import util.CsvAttributesMappingGenerator;public class CsvAttributesMappingGeneratorTest {@Testpublic void testGenerationWithObject() {    System.out.println(CsvAttributesMappingGenerator.generateCsvAttributesMapping(User.class));}}要解析的對(duì)象具有以下結(jié)構(gòu):包對(duì)象;public class User {private String userName;private String userEmail;private int userAge;private String otherDetails;// getters, setters and all args constuctor here}輸出應(yīng)包含多行,如 FIELD_NAME|fieldName|| 應(yīng)該從給定類(lèi)中收集駱駝裝箱物品的地方。正如我在幾個(gè)示例中看到的那樣,我嘗試使用 Java Reflection API,但我得到了一個(gè)奇怪的 String 輸出。(不是序列化的@randomCharsLikeName)。嘗試了 toString() 和其他骯臟的技巧,但沒(méi)有任何效果。有人可以給我小費(fèi)嗎?或者至少告訴我是否可以做我嘗試過(guò)的事情?提前致謝!編輯:?jiǎn)栴}中提供的當(dāng)前代碼原型在隔離環(huán)境(單獨(dú)的新項(xiàng)目)中工作并顯示預(yù)期輸出。雖然它集成在我試圖將其集成到的整個(gè)應(yīng)用程序中,但它不起作用。我會(huì)繼續(xù)研究并讓你知道根本原因(在真正的應(yīng)用程序中我也使用 lombok 作為類(lèi)(@AllArgsConstructor、@NoArgsConstructor、@Data、@ToString), 但老實(shí)說(shuō)我不認(rèn)為這在使用反射時(shí)可能是個(gè)問(wèn)題)
查看完整描述

1 回答

?
喵喵時(shí)光機(jī)

TA貢獻(xiàn)1846條經(jīng)驗(yàn) 獲得超7個(gè)贊

同時(shí)我發(fā)現(xiàn)了這個(gè)問(wèn)題。當(dāng)我對(duì)生成器進(jìn)行游戲原型設(shè)計(jì)時(shí),我使用了:

csvBuilder.append(field.getClass().getName().replaceAll("(.)(\\p{Upper})", "$1_$2").toUpperCase());

產(chǎn)生了類(lèi)似的輸出JAVA.LANG.REFLECT._FIELD|java.lang.reflect.Field||

因?yàn)槲抑皇峭浟宋覍?shí)際上改進(jìn)了它以使用實(shí)際的類(lèi)對(duì)象作為函數(shù)的參數(shù)。在問(wèn)這個(gè)問(wèn)題之前,我對(duì)代碼進(jìn)行了一些 Sonar 修復(fù),但沒(méi)有注意到我修復(fù)了 WARN 以刪除方法.getClass()調(diào)用,因?yàn)槲乙呀?jīng)傳入了一個(gè)類(lèi)(我認(rèn)為這不會(huì)有什么不同,因?yàn)樗皇且粋€(gè)警告)。每日道德提示——永遠(yuǎn)不要忽視警告。

因此,問(wèn)題中提供的代碼片段現(xiàn)在可以在一個(gè)孤立的虛擬項(xiàng)目中正常工作,并且還可以使用固定行集成到一個(gè)更復(fù)雜的項(xiàng)目中:

csvBuilder.append(field.getName().replaceAll("(.)(\\p{Upper})", "$1_$2").toUpperCase());

同樣正如有人在評(píng)論中建議的那樣,field.setAccessible(true);可以刪除它,因?yàn)樗鼘?duì)于該方法的目的是無(wú)用的。


查看完整回答
反對(duì) 回復(fù) 2023-06-14
  • 1 回答
  • 0 關(guān)注
  • 315 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)