- java.lang.Object
-
- jdk.dynalink.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");
-
-
构造方法摘要
构造方法 Constructor 描述 NamespaceOperation(Operation baseOperation, Namespace... namespaces)
构造一个新的命名空间操作。
-
方法摘要
所有方法 静态方法 接口方法 具体的方法 Modifier and Type 方法 描述 boolean
contains(Namespace namespace)
如果此命名空间操作包含等于指定命名空间的命名空间,则返回true。static boolean
contains(Operation op, Operation baseOperation, Namespace namespace)
如果指定的操作是NamespaceOperation
,并且其基本操作等于指定的操作,并且它包含指定的命名空间,则返回true。boolean
equals(Object obj)
如果另一个对象也是命名空间操作,并且它们的基本操作和命名空间相等,则返回true。Operation
getBaseOperation()
返回此命名操作的基本操作。static Operation
getBaseOperation(Operation op)
如果传递的操作是命名空间操作,则返回其getBaseOperation()
,否则返回操作。Namespace
getNamespace(int i)
返回此命名空间操作中的第i个命名空间。int
getNamespaceCount()
返回此命名空间操作中的命名空间数。Namespace[]
getNamespaces()
返回此命名空间操作中的命名空间。static Namespace[]
getNamespaces(Operation op)
如果传递的操作是命名空间操作,则返回其getNamespaces()
,否则返回一个空数组。int
hashCode()
返回此命名空间操作的哈希码。String
toString()
返回此命名空间操作的字符串表示形式。-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface jdk.dynalink.Operation
named, withNamespace, withNamespaces
-
-
-
-
构造方法详细信息
-
NamespaceOperation
public NamespaceOperation(Operation baseOperation, Namespace... namespaces)
构造一个新的命名空间操作。- 参数
-
baseOperation
- 在一个或多个命名空间上运行的基本操作。 -
namespaces
- 此操作操作的一个或多个命名空间。 - 异常
-
IllegalArgumentException
- 如果指定少于一个命名空间,或者基本操作本身为NamespaceOperation
或NamedOperation
。 -
NullPointerException
- 如果namespaces
阵列或其任何元素是null
,或者如果baseOperation
是null
。
-
-
方法详细信息
-
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。- 重写:
-
equals
在Object
- 参数
-
obj
- 要比较的对象 - 结果
- 如果此对象等于另一个对象,则为true,否则为false。
- 另请参见:
-
Object.hashCode()
,HashMap
-
hashCode
public int hashCode()
返回此命名空间操作的哈希码。 定义为baseOperation.hashCode() + 31 * Arrays.hashCode(namespaces)
。- 重写:
-
hashCode
在Object
- 结果
- 该对象的哈希码值。
- 另请参见:
-
Object.equals(java.lang.Object)
,System.identityHashCode(java.lang.Object)
-
toString
public String toString()
返回此命名空间操作的字符串表示形式。 定义为其基本操作的toString
,后跟一个冒号字符,后跟其垂直行字符分隔的命名空间列表(例如"GET:PROPERTY|ELEMENT"
)。
-
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.
-
-