Module  jdk.dynalink
软件包  jdk.dynalink

Class NamespaceOperation

  • All Implemented Interfaces:
    Operation


    public final class NamespaceOperation
    extends Object
    implements Operation
    描述对一个对象的至少一个Namespace进行操作的操作。 例如一个属性吸气剂将被描述为
      Operation propertyGetter = new NamespaceOperation(
         StandardOperation.GET,
         StandardNamespace.PROPERTY); 
    它们通常与NamedOperation相结合,例如为名为“color”的属性表达属性getter,您将构造:
      Operation colorPropertyGetter = new NamedOperation(
         new NamespaceOperation(
             StandardOperation.GET,
             StandardNamespace.PROPERTY),
         "color"); 

    NamespaceOperation可以直接构建,而是更方便地使用Operation.withNamespace(Namespace)Operation.withNamespaces(Namespace...)工厂方法,例如:

      Operation getElementOrPropertyEmpty =
         StandardOperation.GET
             .withNamespace(StandardNamespace.PROPERTY)
             .named("color"); 

    多个命名空间的操作

    如果指定了多个命名空间,则按照首选项的顺序将命名空间视为彼此的替代。 这种操作的语义是“第一适用”。 也就是说, GET:PROPERTY|ELEMENT:color的组合应被解释为在对象上获取名为“color”的属性,但是如果该属性不存在,则可以获取名为“color”的集合元素

    具有多个命名空间的操作有助于实现不区分一个或多个命名空间的语言,或者对可以被视为普通对象和集合的对象(例如Java Map对象)进行表达操作时。 针对Java映射的GET:PROPERTY|ELEMENT:empty操作将始终匹配Map.isEmpty()属性,但如果地图包含该键,则GET:ELEMENT|PROPERTY:empty将实际匹配地图元素与"empty"如果地图不包含该键,则仅返回到isEmpty()属性getter。 如果源语言要求这个语义,可以使用多个命名空间的操作轻松实现。

    即使语言本身没有区分一些命名空间,将不同的语法映射到不同的命名空间排序也是有帮助的。 例如,源表达式obj.color可以映射到GET:PROPERTY|ELEMENT|METHOD:color ,但是不同的源表达式看起来像是收集元素访问obj[key]可以表示为GET:ELEMENT|PROPERTY|METHOD ,以便有利于元素语义。 最后,如果获取的值随后被调用,那么它是有道理带来METHOD命名空间列表的前面:源表达的吸气部分obj.color()可能是GET:METHOD|PROPERTY|ELEMENT:color和一个用于obj[key]()可能是GET:METHOD|ELEMENT|PROPERTY

    命名空间操作的基本操作本身不能是命名空间或命名操作,而是简单操作之一,即StandardOperation元素。 命名空间操作本身可以作为命名操作的基础操作; 从上面构建例如GET:ELEMENT|PROPERTY:empty的典型方式将是:

      Operation getElementOrPropertyEmpty = StandardOperation.GET
         .withNamespaces(
             StandardNamespace.ELEMENT,
             StandardNamespace.PROPERTY)
         .named("empty"); 
    • 构造方法详细信息

      • NamespaceOperation

        public NamespaceOperation​(Operation baseOperation,
                                  Namespace... namespaces)
        构造一个新的命名空间操作。
        参数
        baseOperation - 在一个或多个命名空间上运行的基本操作。
        namespaces - 此操作操作的一个或多个命名空间。
        异常
        IllegalArgumentException - 如果指定少于一个命名空间,或者基本操作本身为NamespaceOperationNamedOperation
        NullPointerException - 如果 namespaces阵列或其任何元素是 null ,或者如果 baseOperationnull
    • 方法详细信息

      • getBaseOperation

        public Operation getBaseOperation​()
        返回此命名操作的基本操作。
        结果
        这个命名操作的基本操作。
      • getNamespaces

        public Namespace[] getNamespaces​()
        返回此命名空间操作中的命名空间。 返回的数组是一个副本,它的更改对此对象没有影响。
        结果
        这个命名空间中的命名空间的操作。
      • getNamespaceCount

        public int getNamespaceCount​()
        返回此命名空间操作中的命名空间数。
        结果
        此命名空间操作中的命名空间数。
      • getNamespace

        public Namespace getNamespace​(int i)
        返回此命名空间操作中的第i个命名空间。
        参数
        i - 命名空间索引
        结果
        这个命名空间中的第i个命名空间的操作。
        异常
        IndexOutOfBoundsException - 如果索引超出范围。
      • contains

        public boolean contains​(Namespace namespace)
        如果此命名空间操作包含等于指定命名空间的命名空间,则返回true。
        参数
        namespace - 正在搜索的命名空间。 不能为空。
        结果
        如果这个命名空间操作包含等于指定命名空间的命名空间,则为true。
      • equals

        public boolean equals​(Object obj)
        如果另一个对象也是命名空间操作,并且它们的基本操作和命名空间相等,则返回true。
        重写:
        equalsObject
        参数
        obj - 要比较的对象
        结果
        如果此对象等于另一个对象,则为true,否则为false。
        另请参见:
        Object.hashCode()HashMap
      • toString

        public String toString​()
        返回此命名空间操作的字符串表示形式。 定义为其基本操作的toString ,后跟一个冒号字符,后跟其垂直行字符分隔的命名空间列表(例如"GET:PROPERTY|ELEMENT" )。
        重写:
        toStringObject
        结果
        这个命名空间操作的字符串表示形式。
      • getBaseOperation

        public static Operation getBaseOperation​(Operation op)
        如果传递的操作是命名空间操作,则返回其 getBaseOperation() ,否则返回操作。
        参数
        op - 操作
        结果
        基本操作的通过操作。
      • getNamespaces

        public static Namespace[] getNamespaces​(Operation op)
        如果传递的操作是命名空间操作,则返回其 getNamespaces() ,否则返回一个空数组。
        参数
        op - 操作
        结果
        通过的操作的命名空间。
      • contains

        public static boolean contains​(Operation op,
                                       Operation baseOperation,
                                       Namespace namespace)
        如果指定的操作是NamespaceOperation并且其基本操作等于指定的操作,并且它包含指定的命名空间,则返回true。 如果它不是一个NamespaceOperation ,那么它返回false。
        参数
        op - 操作。 不能为空。
        baseOperation - 正在搜索的基本操作。 不能为空。
        namespace - 正在搜索的命名空间。 不能为空。
        结果
        true if the if the passed operation is a NamespaceOperation, its base operation equals the searched base operation, and contains a namespace equal to the searched namespace.