模块  jdk.dynalink
软件包  jdk.dynalink

Class NamespaceOperation

  • 实现的所有接口
    Operation

    public final class NamespaceOperation
    extends Object
    implements Operation
    描述对对象的至少一个Namespace进行操作的操作。 例如,属性getter将被描述为
      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"的地图元素, "empty"如果地图不包含该键,则仅回isEmpty()属性获取器。 如果源语言强制要求使用此语义,则可以使用多个名称空间上的操作轻松实现。

    即使语言本身不区分某些命名空间,将不同的语法映射到不同的命名空间顺序也会有所帮助。 例如,源表达式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 - 正在搜索的命名空间。 不能为空。
        结果
        如果if此命名空间操作包含等于指定命名空间的命名空间,则返回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.