Record Class ElvisNode

java.lang.Object
java.lang.Record
cloud.opencode.base.expression.ast.ElvisNode
Record Components:
value - the value expression | 值表达式
defaultValue - the default value expression if value is null | 值为空时的默认值表达式
All Implemented Interfaces:
Node

public record ElvisNode(Node value, Node defaultValue) extends Record implements Node
Elvis/Null-Coalescing Operation Node Elvis/空值合并运算节点

Represents the elvis operator ?: which returns the left operand if non-null, otherwise evaluates and returns the right operand (default value).

表示 elvis 运算符 ?:,如果左操作数非空则返回左操作数, 否则求值并返回右操作数(默认值)。

Features | 主要功能:

  • Null-coalescing with lazy default evaluation - 空值合并,默认值惰性求值
  • Short-circuit: default not evaluated if value is non-null - 短路求值:值非空时不求值默认值

Usage Examples | 使用示例:

// name ?: 'unknown'
Node elvis = ElvisNode.of(nameNode, defaultNode);
Object result = elvis.evaluate(ctx);

Security | 安全性:

  • Thread-safe: Yes, immutable record - 线程安全: 是,不可变记录
  • Null-safe: No, value and defaultValue required non-null - 空值安全: 否,值和默认值要求非空
Since:
JDK 25, opencode-base-expression V1.0.3
Author:
Leon Soo www.LeonSoo.com
See Also:
  • Constructor Details

    • ElvisNode

      public ElvisNode(Node value, Node defaultValue)
      Creates an instance of a ElvisNode record class.
      Parameters:
      value - the value for the value record component
      defaultValue - the value for the defaultValue record component
  • Method Details

    • of

      public static ElvisNode of(Node value, Node defaultValue)
      Create elvis operation node 创建 elvis 运算节点
      Parameters:
      value - the value expression | 值表达式
      defaultValue - the default value expression | 默认值表达式
      Returns:
      the elvis operation node | elvis 运算节点
    • evaluate

      public Object evaluate(EvaluationContext context)
      Description copied from interface: Node
      Evaluate this node 求值此节点
      Specified by:
      evaluate in interface Node
      Parameters:
      context - the evaluation context | 求值上下文
      Returns:
      the evaluation result | 求值结果
    • toExpressionString

      public String toExpressionString()
      Description copied from interface: Node
      Get string representation for debugging 获取用于调试的字符串表示
      Specified by:
      toExpressionString in interface Node
      Returns:
      the string representation | 字符串表示
    • toString

      public final String toString()
      Returns a string representation of this record class. The representation contains the name of the class, followed by the name and value of each of the record components.
      Specified by:
      toString in class Record
      Returns:
      a string representation of this object
    • hashCode

      public final int hashCode()
      Returns a hash code value for this object. The value is derived from the hash code of each of the record components.
      Specified by:
      hashCode in class Record
      Returns:
      a hash code value for this object
    • equals

      public final boolean equals(Object o)
      Indicates whether some other object is "equal to" this one. The objects are equal if the other object is of the same class and if all the record components are equal. All components in this record class are compared with Objects::equals(Object,Object).
      Specified by:
      equals in class Record
      Parameters:
      o - the object with which to compare
      Returns:
      true if this object is the same as the o argument; false otherwise.
    • value

      public Node value()
      Returns the value of the value record component.
      Returns:
      the value of the value record component
    • defaultValue

      public Node defaultValue()
      Returns the value of the defaultValue record component.
      Returns:
      the value of the defaultValue record component