我正在嘗試以自動方式為 Java 類的字段生成 CSV 映射,因為我需要多次使用它。我有以下嘗試獲取字段名稱的方法:(其中 CSV 標頭類似于“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);}}和一個測試電話,例如:import objects.User;import org.junit.Test;import util.CsvAttributesMappingGenerator;public class CsvAttributesMappingGeneratorTest {@Testpublic void testGenerationWithObject() { System.out.println(CsvAttributesMappingGenerator.generateCsvAttributesMapping(User.class));}}要解析的對象具有以下結構:包對象;public class User {private String userName;private String userEmail;private int userAge;private String otherDetails;// getters, setters and all args constuctor here}輸出應包含多行,如 FIELD_NAME|fieldName|| 應該從給定類中收集駱駝裝箱物品的地方。正如我在幾個示例中看到的那樣,我嘗試使用 Java Reflection API,但我得到了一個奇怪的 String 輸出。(不是序列化的@randomCharsLikeName)。嘗試了 toString() 和其他骯臟的技巧,但沒有任何效果。有人可以給我小費嗎?或者至少告訴我是否可以做我嘗試過的事情?提前致謝!編輯:問題中提供的當前代碼原型在隔離環境(單獨的新項目)中工作并顯示預期輸出。雖然它集成在我試圖將其集成到的整個應用程序中,但它不起作用。我會繼續研究并讓你知道根本原因(在真正的應用程序中我也使用 lombok 作為類(@AllArgsConstructor、@NoArgsConstructor、@Data、@ToString), 但老實說我不認為這在使用反射時可能是個問題)
獲取Java中類的字段名稱
慕尼黑8549860
2023-06-14 16:15:05