Class TypedIdGenerator
java.lang.Object
cloud.opencode.base.id.prefixed.TypedIdGenerator
- All Implemented Interfaces:
IdGenerator<String>
Typed ID Generator - Wraps any string ID generator with a validated type prefix
类型化ID生成器 - 用验证过的类型前缀包装任意字符串ID生成器
Produces IDs in the format <prefix>_<rawId>, making each ID self-describing.
This pattern (popularized by Stripe) embeds the entity type in the ID itself,
preventing accidental cross-entity ID usage and simplifying debugging.
生成格式为<prefix>_<rawId>的ID,使每个ID具有自描述性。
这种模式(由Stripe推广)将实体类型嵌入ID本身,防止跨实体ID误用,简化调试。
Features | 主要功能:
- Prefix validation at construction time - 构造时验证前缀
- Delegates to any
IdGenerator<String>- 委托给任意字符串ID生成器 - Thread-safe if the inner generator is thread-safe - 内部生成器线程安全时本类也线程安全
- Returns both
StringandPrefixedIdforms - 同时支持String和PrefixedId形式
Usage Examples | 使用示例:
// Create typed generators
TypedIdGenerator userGen = TypedIdGenerator.of("usr",
NanoIdGenerator.create());
TypedIdGenerator orderGen = TypedIdGenerator.of("order",
UlidGenerator.create());
// Generate IDs
String userId = userGen.generate(); // "usr_V1StGXR8_Z5jdHi6B-myT"
PrefixedId oid = orderGen.generatePrefixed(); // prefix="order", rawId="01ARZ3NDEK..."
System.out.println(userId); // "usr_V1StGXR8_Z5jdHi6B-myT"
System.out.println(oid); // "order_01ARZ3NDEK..."
System.out.println(oid.prefix()); // "order"
Security | 安全性:
- Thread-safe: Same as underlying generator - 线程安全: 与底层生成器相同
- Null-safe: No (throws on null) - 空值安全: 否(空值抛异常)
- Since:
- JDK 25, opencode-base-id V1.0.3
- Author:
- Leon Soo www.LeonSoo.com
- See Also:
-
Method Summary
Modifier and TypeMethodDescriptiongenerate()Generates a prefixed ID string (e.g., "usr_01ARZ3NDEK...")generateBatch(int count) Generates a batch of prefixed ID strings 批量生成带前缀的ID字符串Generates a PrefixedId (structured form with accessible prefix and rawId) 生成PrefixedId(带可访问前缀和原始ID的结构化形式)Returns the type prefix of this generator 返回此生成器的类型前缀getType()Returns the type identifier including prefix 返回包含前缀的类型标识符static TypedIdGeneratorof(String prefix, IdGenerator<String> inner) Creates a TypedIdGenerator with the given prefix and inner generator 使用给定前缀和内部生成器创建TypedIdGenerator
-
Method Details
-
of
Creates a TypedIdGenerator with the given prefix and inner generator 使用给定前缀和内部生成器创建TypedIdGeneratorExamples | 示例:
TypedIdGenerator.of("usr", UlidGenerator.create()) // user IDs TypedIdGenerator.of("order", NanoIdGenerator.create()) // order IDs- Parameters:
prefix- the entity-type prefix (lowercase, e.g., "usr", "order") | 实体类型前缀(小写,如"usr"、"order")inner- the underlying string ID generator | 底层字符串ID生成器- Returns:
- TypedIdGenerator instance | TypedIdGenerator实例
- Throws:
OpenIdGenerationException- if prefix is invalid or inner is null | 前缀无效或inner为null时抛出
-
generate
Generates a prefixed ID string (e.g., "usr_01ARZ3NDEK...") 生成带前缀的ID字符串(如"usr_01ARZ3NDEK...")Examples | 示例:
TypedIdGenerator.of("usr", ulidGen).generate() = "usr_01ARZ3NDEKTSV4RRFFQ69G5FAV" TypedIdGenerator.of("order", nanoGen).generate() = "order_V1StGXR8_Z5jdHi6B-myT"Performance | 性能:
Time: O(inner.generate()) + O(prefix.length()), Space: O(1)
- Specified by:
generatein interfaceIdGenerator<String>- Returns:
- prefixed ID string | 带前缀的ID字符串
-
generateBatch
Generates a batch of prefixed ID strings 批量生成带前缀的ID字符串- Specified by:
generateBatchin interfaceIdGenerator<String>- Parameters:
count- number of IDs to generate | 要生成的ID数量- Returns:
- list of prefixed ID strings | 带前缀的ID字符串列表
-
generatePrefixed
Generates a PrefixedId (structured form with accessible prefix and rawId) 生成PrefixedId(带可访问前缀和原始ID的结构化形式)- Returns:
- PrefixedId instance | PrefixedId实例
-
getPrefix
Returns the type prefix of this generator 返回此生成器的类型前缀- Returns:
- prefix string | 前缀字符串
-
getType
Returns the type identifier including prefix 返回包含前缀的类型标识符- Specified by:
getTypein interfaceIdGenerator<String>- Returns:
- type string | 类型字符串
-