Class NamedOperation

All Implemented Interfaces:
Operation
public final class NamedOperation
extends Object
implements Operation

Operation that associates a name with another operation. Typically used with operations that normally take a name or an index to bind them to a fixed name. E.g.

new NamedOperation(
         new NamespaceOperation(
             StandardOperation.GET,
             StandardNamespace.PROPERTY),
         "color")
will be a named operation for getting the property named "color" on the object it is applied to, and
new NamedOperation(
         new NamespaceOperation(
             StandardOperation.GET,
             StandardNamespace.ELEMENT),
         3)
will be a named operation for getting the element at index 3 from the collection it is applied to ("name" in this context is akin to "address" and encompasses both textual names, numeric indices, or any other kinds of addressing that linkers can understand). In these cases, the expected signature of the call site for the operation will change to no longer include the name parameter. Specifically, the documentation for all StandardOperation members describes how they are affected by being incorporated into a named operation.

While NamedOperation can be constructed directly, it is often convenient to use the Operation.named(Object) factory method instead, e.g.:

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

Even though NamedOperation is most often used with NamespaceOperation as its base, it can have other operations as its base too (except another named operation). Specifically, StandardOperation.CALL as well as StandardOperation.NEW can both be used with NamedOperation directly. The contract for these operations is such that when they are used as named operations, their name is only used for diagnostic messages, usually containing the textual representation of the source expression that retrieved the callee, e.g. StandardOperation.CALL.named("window.open").

Constructors

Constructor Description
NamedOperation​(Operation baseOperation, Object name)

Creates a new named operation.

Methods

Modifier and Type Method Description
NamedOperation changeName​(String newName)

Finds or creates a named operation that differs from this one only in the name.

boolean equals​(Object obj)

Compares this named operation to another object.

Operation getBaseOperation()

Returns the base operation of this named operation.

static Operation getBaseOperation​(Operation op)

If the passed operation is a named operation, returns its getBaseOperation(), otherwise returns the operation as is.

Object getName()

Returns the name of this named operation.

static Object getName​(Operation op)

If the passed operation is a named operation, returns its getName(), otherwise returns null.

int hashCode()

Returns the hash code of this named operation.

String toString()

Returns the string representation of this named operation.

Methods declared in class java.lang.Object

clone, finalize, getClass, notify, notifyAll, wait, wait, wait

Methods declared in interface jdk.dynalink.Operation

named, withNamespace, withNamespaces

Constructors

NamedOperation

public NamedOperation(Operation baseOperation,
                      Object name)

Creates a new named operation.

Parameters:
baseOperation - the base operation that is associated with a name.
name - the name associated with the base operation. Note that the name is not necessarily a string, but can be an arbitrary object. As the name is used for addressing, it can be an Integer when meant to be used as an index into an array or list etc.
Throws:
NullPointerException - if either baseOperation or name is null.
IllegalArgumentException - if baseOperation is itself a NamedOperation.

Methods

getBaseOperation

public Operation getBaseOperation()

Returns the base operation of this named operation.

Returns:
the base operation of this named operation.

getName

public Object getName()

Returns the name of this named operation.

Returns:
the name of this named operation.

changeName

public final NamedOperation changeName(String newName)

Finds or creates a named operation that differs from this one only in the name.

Parameters:
newName - the new name to replace the old name with.
Returns:
a named operation with the changed name.
Throws:
NullPointerException - if the name is null.

equals

public boolean equals(Object obj)

Compares this named operation to another object. Returns true if the other object is also a named operation, and both their base operations and name are equal.

Overrides:
equals in class Object
Parameters:
obj - the reference object with which to compare.
Returns:
true if this object is the same as the obj argument; false otherwise.
See Also:
Object.hashCode(), HashMap

hashCode

public int hashCode()

Returns the hash code of this named operation. It is defined to be equal to baseOperation.hashCode() + 31 * name.hashCode().

Overrides:
hashCode in class Object
Returns:
a hash code value for this object.
See Also:
Object.equals(java.lang.Object), System.identityHashCode(java.lang.Object)

toString

public String toString()

Returns the string representation of this named operation. It is defined to be equal to baseOperation.toString() + ":" + name.toString().

Overrides:
toString in class Object
Returns:
a string representation of the object.

getBaseOperation

public static Operation getBaseOperation(Operation op)

If the passed operation is a named operation, returns its getBaseOperation(), otherwise returns the operation as is.

Parameters:
op - the operation
Returns:
the base operation of the passed operation.

getName

public static Object getName(Operation op)

If the passed operation is a named operation, returns its getName(), otherwise returns null. Note that a named operation object can never have a null name, therefore returning null is indicative that the passed operation is not, in fact, a named operation.

Parameters:
op - the operation
Returns:
the name in the passed operation, or null if it is not a named operation.

© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/11/docs/api/jdk.dynalink/jdk/dynalink/NamedOperation.html