You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多类型对象属性转%分隔格式字符串的技术实现需求

解决对象转特定%分隔格式字符串的方案

嘿,我来帮你搞定这个把Employee和Address对象转换成指定格式字符串的需求!咱们一步步来:

核心思路

我们需要把每个对象的属性按照「属性标识%属性值」的片段拼接,最后把所有对象的片段用%连接起来,形成最终的目标字符串。

前置准备:补充类的必要方法

因为原类的属性都是private修饰的,我们需要添加Getter方法来访问这些属性,同时补充构造方法方便快速创建对象:

public class Employee {
    private String name;
    private int age;

    // 构造方法
    public Employee(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // Getter方法
    public String getName() { return name; }
    public int getAge() { return age; }
}

public class Address {
    private String houseNo;
    private String street;
    private String pin;

    // 构造方法
    public Address(String houseNo, String street, String pin) {
        this.houseNo = houseNo;
        this.street = street;
        this.pin = pin;
    }

    // Getter方法
    public String getHouseNo() { return houseNo; }
    public String getStreet() { return street; }
    public String getPin() { return pin; }
}

方案一:硬编码实现(简单直接,适合属性固定场景)

这种方式代码直观、性能好,适合属性不会频繁变动的情况:

public class ObjectToStringConverter {

    // 把Employee转成对应格式片段
    private static String convertEmployee(Employee emp) {
        return "NA%" + emp.getName() + "%AG%" + emp.getAge();
    }

    // 把Address转成对应格式片段
    private static String convertAddress(Address adr) {
        return "HN%" + adr.getHouseNo() + "%ST%" + adr.getStreet() + "%PN%" + adr.getPin();
    }

    // 合并两个对象的片段得到最终字符串
    public static String combine(Employee emp, Address adr) {
        return convertEmployee(emp) + "%" + convertAddress(adr);
    }

    // 测试示例
    public static void main(String[] args) {
        Employee emp = new Employee("Vidhya", 30);
        Address adr = new Address("80", "1st cross", "100100");
        String result = combine(emp, adr);
        System.out.println(result);
        // 输出:NA%Vidhya%AG%30%HN%80%ST%1st cross%PN%100100
    }
}

方案二:反射实现(灵活扩展,适合属性可能变动场景)

如果后续可能新增属性,用反射可以避免修改转换逻辑,只需要更新属性标识映射表即可:

import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;

public class FlexibleObjectConverter {

    // 定义属性名到标识的映射表
    private static final Map<String, String> PROPERTY_TO_ID = new HashMap<>();
    static {
        PROPERTY_TO_ID.put("name", "NA");
        PROPERTY_TO_ID.put("age", "AG");
        PROPERTY_TO_ID.put("houseNo", "HN");
        PROPERTY_TO_ID.put("street", "ST");
        PROPERTY_TO_ID.put("pin", "PN");
    }

    // 单个对象转格式片段
    private static String convertObject(Object obj) throws IllegalAccessException {
        StringBuilder segment = new StringBuilder();
        Field[] fields = obj.getClass().getDeclaredFields();
        
        for (Field field : fields) {
            field.setAccessible(true); // 允许访问私有属性
            String fieldName = field.getName();
            String id = PROPERTY_TO_ID.get(fieldName);
            
            if (id != null) {
                Object value = field.get(obj);
                segment.append(id).append("%").append(value).append("%");
            }
        }

        // 移除最后多余的%
        if (segment.length() > 0) {
            segment.deleteCharAt(segment.length() - 1);
        }
        return segment.toString();
    }

    // 合并多个对象的片段
    public static String combineObjects(Object... objects) throws IllegalAccessException {
        StringBuilder result = new StringBuilder();
        for (Object obj : objects) {
            String segment = convertObject(obj);
            if (result.length() > 0) {
                result.append("%");
            }
            result.append(segment);
        }
        return result.toString();
    }

    // 测试示例
    public static void main(String[] args) throws IllegalAccessException {
        Employee emp = new Employee("Vidhya", 30);
        Address adr = new Address("80", "1st cross", "100100");
        String result = combineObjects(emp, adr);
        System.out.println(result);
        // 输出同样符合要求的字符串
    }
}

两种方案对比

  • 硬编码:代码易读、性能高,适合属性固定的场景,但新增属性时需要修改转换方法。
  • 反射:扩展性强,新增属性只需要更新映射表,但性能略低,且需要处理反射相关的异常。

内容的提问来源于stack exchange,提问作者Saumya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:39:47