如何创建可跨类传递的静态List,实现UUID转名称功能?
简洁解决方案:基于Map的UUID-名称映射实现
你提到的「静态List」并不适合实现根据ID查询名称的需求——List遍历查询效率低,更合适的方案是用**静态Map<UUID, String>**维护UUID与名称的映射关系,同时封装查询逻辑,既支持直接调用,也能通过接口传递给不同类。
场景1:直接使用静态工具类(最简洁)
创建一个工具类,内部维护静态映射表,提供静态查询方法:
import java.util.Map; import java.util.UUID; public class UuidNameMapper { // 静态存储UUID-名称映射,可提前初始化或动态修改 public static final Map<UUID, String> UUID_NAME_MAP = Map.of( UUID.fromString("a1b2c3d4-1234-5678-90ab-cdef01234567"), "用户A", UUID.fromString("e5f6g7h8-8765-4321-ba09-fedc65432109"), "用户B" ); // 根据UUID获取名称的静态方法,找不到返回默认值避免空指针 public static String getNameByUUID(UUID uid) { return UUID_NAME_MAP.getOrDefault(uid, "未知名称"); } }
使用时直接调用,完全匹配你的代码需求:
updateSingleItem(new InformationListModule(UuidNameMapper.getNameByUUID(uid), value));
如果需要动态添加/修改映射,只需把Map.of()换成new HashMap<>(),再添加静态修改方法:
public static void addOrUpdateMapping(UUID uid, String name) { UUID_NAME_MAP.put(uid, name); }
场景2:通过接口传递查询能力(适配多类调用场景)
如果需要把「根据UUID查名称」的能力传递给不同类,可定义一个函数式接口,通过方法引用传递逻辑:
import java.util.UUID; // 函数式接口,描述UUID转名称的行为 @FunctionalInterface public interface UuidNameProvider { String getNameByUUID(UUID uid); }
在需要接收该能力的类中,通过构造方法或方法参数传入:
public class DataProcessor { private final UuidNameProvider nameProvider; public DataProcessor(UuidNameProvider nameProvider) { this.nameProvider = nameProvider; } public void processItem(UUID uid, String value) { updateSingleItem(new InformationListModule(nameProvider.getNameByUUID(uid), value)); } } // 使用时传入工具类的静态方法引用 DataProcessor processor = new DataProcessor(UuidNameMapper::getNameByUUID);
这种方式既保留了静态数据的复用性,又能灵活地将查询能力传递给任意类。
内容的提问来源于stack exchange,提问作者rene
相关产品推荐
相关产品推荐

