Class TypedIdGenerator

java.lang.Object
cloud.opencode.base.id.prefixed.TypedIdGenerator
All Implemented Interfaces:
IdGenerator<String>

public final class TypedIdGenerator extends Object implements 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 String and PrefixedId forms - 同时支持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 Details

    • of

      public static TypedIdGenerator of(String prefix, IdGenerator<String> inner)
      Creates a TypedIdGenerator with the given prefix and inner generator 使用给定前缀和内部生成器创建TypedIdGenerator

      Examples | 示例:

      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

      public String 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:
      generate in interface IdGenerator<String>
      Returns:
      prefixed ID string | 带前缀的ID字符串
    • generateBatch

      public List<String> generateBatch(int count)
      Generates a batch of prefixed ID strings 批量生成带前缀的ID字符串
      Specified by:
      generateBatch in interface IdGenerator<String>
      Parameters:
      count - number of IDs to generate | 要生成的ID数量
      Returns:
      list of prefixed ID strings | 带前缀的ID字符串列表
    • generatePrefixed

      public PrefixedId generatePrefixed()
      Generates a PrefixedId (structured form with accessible prefix and rawId) 生成PrefixedId(带可访问前缀和原始ID的结构化形式)
      Returns:
      PrefixedId instance | PrefixedId实例
    • getPrefix

      public String getPrefix()
      Returns the type prefix of this generator 返回此生成器的类型前缀
      Returns:
      prefix string | 前缀字符串
    • getType

      public String getType()
      Returns the type identifier including prefix 返回包含前缀的类型标识符
      Specified by:
      getType in interface IdGenerator<String>
      Returns:
      type string | 类型字符串