Interface Type<T>

Type Parameters:
T - the Java type associated with this logical type
All Superinterfaces:
Copyable<Type<T>>, Named
All Known Implementing Classes:
TypeWrapper

public interface Type<T> extends Named, Copyable<Type<T>>
Represents an engine's internal logical type, which is assigned to every fact before it is inserted into the session's working memory. A fact's association with a logical type can be explicit, via the RuleSession.insertAs(String, Object) method, or implicit, through the fact's Java type.

Each logical type is uniquely identified by its logical name, retrievable via the Named.getName() method, and is associated with a specific Java type, obtainable through the getJavaType() method. This mechanism allows for facts of the same Java type to be differentiated based on their logical names.

Each type inherits public fields and getters from its associated Java class, while also supporting the declaration of custom fields for use in rule conditions.

  • Method Details

    • getId

      int getId()

      Each type is assigned a unique auto-increment int identifier which developers can use in SPI implementations, for example in sharding/partitioning data collections.

      Returns:
      unique type identifier.
    • resolveJavaType

      Class<T> resolveJavaType()
    • getJavaType

      String getJavaType()

      There can be only one Type with the given name, but there could be many types associated with a specific Java Class. This method returns the associated Java type.

      Returns:
      name of the Java Class associated with the type.
    • getDeclaredFields

      Collection<TypeField> getDeclaredFields()

      Method returns ALL known fields, both explicitly declared and resolved.

      Returns:
      Collection of declared fields
      See Also:
    • getField

      TypeField getField(String name)

      Returns a declared field with the given name. If no such field was explicitly declared, an attempt will be made to resolve the respective field/getter of the declared Java class. If no such field or getter is found, the method will throw IllegalArgumentException

      Empty field name has a special meaning of the "this" value, i.e. such field's values represent the type's instances themself.

      Parameters:
      name - field name or empty string if the field denotes the type's this value
      Returns:
      declared or resolved field
      Throws:
      IllegalArgumentException - if no field with such name could be found or resolved
    • declareField

      <V> TypeField declareField(String name, Class<V> type, Function<T,V> function)

      Field declaration with a Function as value reader.

      Type Parameters:
      V - field value generic type
      Parameters:
      name - field name
      type - field value class
      function - the function that will be used to read field's value
      Returns:
      a newly created field or an existing one if already declared/resolved
    • declareIntField

      default TypeField declareIntField(String name, ToIntFunction<T> function)

      Method declares a primitive int field.

      Parameters:
      name - field name
      function - field functional interface
      Returns:
      a newly created field or an existing one if already declared/resolved
    • declareLongField

      default TypeField declareLongField(String name, ToLongFunction<T> function)

      Method declares a primitive long field.

      Parameters:
      name - field name
      function - field functional interface
      Returns:
      a newly created field or an existing one if already declared/resolved
    • declareDoubleField

      default TypeField declareDoubleField(String name, ToDoubleFunction<T> function)

      Method declares a primitive double field.

      Parameters:
      name - field name
      function - field functional interface
      Returns:
      a newly created field or an existing one if already declared/resolved
    • declareBooleanField

      default TypeField declareBooleanField(String name, Predicate<T> function)

      Method declares a primitive boolean field.

      Parameters:
      name - field name
      function - field functional interface
      Returns:
      a newly created field or an existing one if already declared/resolved