Module jdk.dynalink
Package jdk.dynalink

Class NamedOperation

java.lang.Object
jdk.dynalink.NamedOperation
所有已实现的接口:
Operation

public final class NamedOperation extends Object implements Operation
将名称与另一个操作关联的操作。通常与通常需要名称或索引的操作一起使用,以将它们绑定到固定名称。例如,
     new NamedOperation(
         new NamespaceOperation(
             StandardOperation.GET,
             StandardNamespace.PROPERTY),
         "color")
 
将是一个命名操作,用于获取应用于对象的名为"color"的属性,并且
     new NamedOperation(
         new NamespaceOperation(
             StandardOperation.GET,
             StandardNamespace.ELEMENT),
         3)
 
将是一个命名操作,用于从应用于集合的索引3处获取元素(在此上下文中,"名称"类似于"地址",包括文本名称、数字索引或链接器可以理解的任何其他类型的寻址)。在这些情况下,操作的调用站点的预期签名将发生变化,不再包括名称参数。具体来说,所有StandardOperation成员的文档描述了它们被合并到命名操作中时的影响。

虽然可以直接构造NamedOperation,但通常最好使用Operation.named(Object)工厂方法,例如:

    StandardOperation.GET
        .withNamespace(StandardNamespace.ELEMENT),
        .named(3)
     )
 

尽管NamedOperation通常与NamespaceOperation作为其基础一起使用,但它也可以具有其他操作作为其基础(除了另一个命名操作)。具体来说,StandardOperation.CALL以及StandardOperation.NEW都可以直接与NamedOperation一起使用。这些操作的约定是,当它们作为命名操作使用时,它们的名称仅用于诊断消息,通常包含检索调用方的源表达式的文本表示,例如StandardOperation.CALL.named("window.open")

  • Constructor Details

    • NamedOperation

      public NamedOperation(Operation baseOperation, Object name)
      创建一个新的命名操作。
      参数:
      baseOperation - 与名称关联的基本操作。
      name - 与基本操作关联的名称。请注意,名称不一定是字符串,而可以是任意对象。由于名称用于寻址,因此当需要用作数组或列表等的索引时,它可以是一个Integer
      抛出:
      NullPointerException - 如果baseOperationname为null。
      IllegalArgumentException - 如果baseOperation本身是一个NamedOperation
  • Method Details

    • getBaseOperation

      public Operation getBaseOperation()
      返回此命名操作的基本操作。
      返回:
      此命名操作的基本操作。
    • getName

      public Object getName()
      返回此命名操作的名称。
      返回:
      此命名操作的名称。
    • changeName

      public final NamedOperation changeName(String newName)
      查找或创建一个与此命名操作仅在名称上不同的命名操作。
      参数:
      newName - 要替换旧名称的新名称。
      返回:
      具有更改名称的命名操作。
      抛出:
      NullPointerException - 如果名称为null。
    • equals

      public boolean equals(Object obj)
      将此命名操作与另一个对象进行比较。如果另一个对象也是一个命名操作,并且它们的基本操作和名称都相等,则返回true。
      覆盖:
      equals 在类中 Object
      参数:
      obj - 要比较的引用对象。
      返回:
      如果此对象与obj参数相同,则返回true;否则返回false
      参见:
    • hashCode

      public int hashCode()
      返回此命名操作的哈希码。它被定义为baseOperation.hashCode() + 31 * name.hashCode()
      覆盖:
      hashCode 在类中 Object
      返回:
      此对象的哈希码值。
      参见:
    • toString

      public String toString()
      返回此命名操作的字符串表示。它被定义为baseOperation.toString() + ":" + name.toString()
      覆盖:
      toString 在类中 Object
      返回:
      对象的字符串表示。
    • getBaseOperation

      public static Operation getBaseOperation(Operation op)
      如果传递的操作是一个命名操作,则返回其getBaseOperation(),否则返回操作本身。
      参数:
      op - 操作
      返回:
      传递操作的基本操作。
    • getName

      public static Object getName(Operation op)
      如果传递的操作是一个命名操作,则返回其getName(),否则返回null。请注意,命名操作对象永远不会具有空名称,因此返回null表明传递的操作实际上不是一个命名操作。
      参数:
      op - 操作
      返回:
      传递操作中的名称,如果它不是一个命名操作,则返回null。